c# winform 调用ocx控件方法返回值问题

liufuchun0206 2016-12-16 12:51:31
程序基本信息:
我的程序是c# winform程序,程序中需要调用磁卡读卡器的ocx驱动方法。
现状描述:
现在已经实现了调用ocx中的方法,也有返回值,但是每次返回值都是默认返回值。
程序原理:
1、程序调用ocx:ocx是C++写的ocx,ocx中有读卡接口方法,成功返回0,否则为失败。成功或失败时都会触发响应的事件,后面会有说明。我注册ocx后将ocx控件添加到工具箱中,然后将ocx控件拖拽到需要调用的Form中进行调用。
2、ocx描述:ocx也是我自己写的,有源码,后面会贴出。ocx方法中需要调用另外的Dll文件中的方法(感觉问题就出在这里)。
问题描述:
现在问题是这样,虽然成功的调用到了ocx中的方法,但是执行速度很快,马上返回执行结果,并且触发了响应的ocx中的方法。但是实际效果应该是调用方法(读磁卡)后程序需要等待操作人进行刷卡操作,刷卡成功后程序继续向下执行。
c#代码:
//磁卡
private void button1_Click(object sender, EventArgs e)
{
try
{
//获取设备超时时间
string timeOut = Global.GetConfigAppSetting("DeviceTimeOut");
short iTimeOut = 0;
if (!short.TryParse(timeOut, out iTimeOut))
{
iTimeOut = 20;
}
//读卡
int nResult = this.CardDevice.ReadTracks(iTimeOut);
if (nResult == 0)
{
LogManager.OperateLogHelper.WriteOperationLog("读卡成功!");

MessageBox.Show(this.CardDevice.strTrack2);
MessageBox.Show(this.CardDevice.strTrack3);
}
else
{
MessageBox.Show("操作失败!");
}
}
catch (Exception ex)
{
MessageBox.Show("获取设备驱动失败!");
}
}
ocx代码:
short CCardDeviceCtrl::ReadTracks(short Timeout)
{
// TODO: Add your dispatch handler code here

m_strTrace.Format("ReadTracks Start");
m_log.WriteTraceLog(m_strTrace);

int nResult = 0;
char track2[256];
char track3[256];
memset(track2,0,256);
memset(track3,0,256);

//调用DLL中的方法进行读卡操作。
//问题应该在这里,代码并没有在此等待操作人刷卡操作,而是直接往下执行并返回结果。
nResult = m_lPXTY_MsrRead(m_Port,m_BPPort,m_Baudrate,23,0,track2,track3,Timeout);
if(nResult >= 0)
{
m_strTrack2 = track2;
m_strTrack3 = track3;
}
else
{
m_strTrack2 = "";
m_strTrack3 = "";
}


m_strTrace.Format("ReadTracks Result=%d end",nResult);
m_log.WriteTraceLog(m_strTrace);

if(nResult == 0)
{
FireReadComplete();
}
else if(nResult == -203 || nResult == -206)
{
FireTimeOut();
}
else
{
FireDeviceError();
}

return nResult;
}

感觉 nResult = m_lPXTY_MsrRead(m_Port,m_BPPort,m_Baudrate,23,0,track2,track3,Timeout);这句被异步执行了
...全文
215 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
liufuchun0206 2016-12-19
  • 打赏
  • 举报
回复
问题解决了,但是不知道问题出在哪里。 我只是重新生成了一下ocx然后就没有问题了,ocx代码我也没有修改过,而且之前的ocx在web中是正常使用了很长时间的了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧