调用 vb.net 写的dll的问题

gys_yxr 2008-02-19 03:09:12
用VB.NET 写的一个DLL 在VB.NET 中调用是发现 DLL中的变量无法实时传递值如下所示
mServer 是 VB.NET 写的一个类
lIntRecCount = mServer.InBufferCount
If lIntRecCount <> 0 Then

End If
运行时发现 lIntRecCount 一直为零 如果在 If lIntRecCount <> 0 Then 中断时 则可以看到 lIntRecCount 不为零
不知道是怎么会事啊
...全文
136 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ping502 2008-02-24
  • 打赏
  • 举报
回复
用靜態變量來做,可能會好點。
dombo 2008-02-24
  • 打赏
  • 举报
回复
同意kingsunmax 说的,多线程中很容易出现这些问题,一定要在需要的地方用上synclock

还有一种可能是你引用的前面可能同时触发了两个事件执行的代码中都涉及到了lIntRecCount
kingsunmax 2008-02-22
  • 打赏
  • 举报
回复
楼主是不是在DLL里用了多线程啊.
80%肯定你是用了.
herol 2008-02-22
  • 打赏
  • 举报
回复
在 If lIntRecCount <> 0 Then 这个时候,不为0,如果后来变为0了,那么在以后的代码里一定做过修改
paulin 2008-02-22
  • 打赏
  • 举报
回复
学习~
cnzdgs 2008-02-20
  • 打赏
  • 举报
回复
mServer.InBufferCount是什么类型,在什么情况下修改它的值?
wzuomin 2008-02-20
  • 打赏
  • 举报
回复
To:wood87654321
我觉的说得对
netfeel2008 2008-02-20
  • 打赏
  • 举报
回复
if lIntRecCount = 0 then
...
else
...
wood87654321 2008-02-20
  • 打赏
  • 举报
回复
问题可能出在mServer类获得InBufferCount属性值的过程中,如果该值通过非阻塞网络接收形式获得,或者mServer类运行于一个独立的线程中,则可能mServer尚未获得InBufferCount新的当前值时,主程序就已经执行到If lIntRecCount <> 0 Then这句,所以得到0,而单步调试则给了mServer充足的响应时间,所以正确。

稳妥的办法是在mServer中通过InBufferCount的变化引发自定义事件,在主程序中处理事件
gys_yxr 2008-02-20
  • 打赏
  • 举报
回复
单步都是正常的 运行时在If lIntRecCount <> 0 Then 中设置断点无法进入断点 因此确定lIntRecCount 一直为零

如果在 lIntRecCount = mServer.InBufferCount 设置断点则 能正常运行 即 lIntRecCount 不为零
如果在 If lIntRecCount <> 0 Then 设置断点则发现 lIntRecCount一直为零 无法进入IF 条件

cnzdgs 2008-02-19
  • 打赏
  • 举报
回复
你是怎么确定lIntRecCount一直为零的?
lovehongyun 2008-02-19
  • 打赏
  • 举报
回复
单步调试一下.

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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