【VB6】使用CreateMutex的一个坑爹之处
创建互斥体非常简单,网上的C代码一般都是CreateMutex(NULL,0,"name")。比如这位大聪明写的代码:但如果把这行代码翻译到VB6里,准保能气得你拍桌子,因为你会发现,GetLastError()永远是0。正确的方法是不能偷懒,要填充SECURITY_ATTRIBUTES。**** Hidden Message ***** 楼主大能,感谢感谢 所以在这个地方,使用互斥体仅仅是为了实现“App_PrevInstance()”这个功能?咦……
我一直拿这玩意儿做多线程、多进程交互的一个东西,当锁用,你却拿它来做“App_PrevInstance()”
编程真奇妙啊
我记得没错的话VB6调用GetLastError为0,那是因为Declare内部会有别的代码调用,会导致LastError被覆盖问题,所以每次调用Declare的API的时候VB6都会提前调用GetLastError保存到Err.LastDllError上,所以正确的做法是:
一、用Err.LastDllError代替GetLastError。
二、用tlb声明API(包括GetLastError本身) 难怪老马的多线程例子,怪怪的,原来是这个原因 看看
页:
[1]