在VB中调用DLL库的一个罕见问题!!
DLL库中的函数申明:ZLDS10X_Open(char * portnum , int baud , int timeout , int address)
在VB中Private Declare Function ZLDS10X_Open Lib "ZLDS10X" (ByVal Comx As String, ByVal baudrate As Long, ByVal timeout As Long, ByVal netaddress As Long) As Long
……
Private Sub Command1_Click()
……
ahandle = ZLDS10X_Open("com1", 115200, 1000, 1)
……
调用一点问题都没有,做成EXE文件后运行也没问题,监测串口的工作也没有任何问题。
但是问题是:
在VB环境下运行结束后,VB会弹出出错关闭对话框(就是那个可以发送错误报告的对话框),选择调试按钮后,在VC调试中提示好象是有invalid异常从VB中抛出,没有进行捕获。
不知道是VB的问题还是什么
说明一下:
这个DLL库是没问题的,在VC环境下作过各种测试,包括几百个小时的压力测试。
只不过调用了网上的开源的log4cpp,这个log4cpp是有内存泄露的,是否跟这个问题有关系?
请高手帮帮忙,多谢!!
[解决办法]
其实我上面的说错了,extern "C"应该是让编译器使用C的函数命名方式,保持导出函数的名称,以便正确识别。另外,我在3楼的提法一点意义都没有,如果误导了楼主和观众,俺表最示深切的歉意。
这里不是VB调用DLL库的问题,我看了一下DLL的源代码,估计是互斥量未释放,导致VB程序结束后计时器线程仍然处于运行状态,而VB本来就对多线程支持不太好,所以结束后出现错误提示。