我已经导入了kernel32库。 因此,我有可用的createMutex函数,但是我不确定各个参数和返回值。
这是经典的Visual Basic,而不是Visual Basic.NET,但我可能可以使用两种语言的答案形式。
这是CreateMutex的VB6声明-我只是从API查看器中复制了它们,您应该将其作为VB6安装的一部分。 VB6使用当前代码页将字符串编组为以空值结尾的ANSI。
1 2 3 4 5 6 7 8 9
| Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Public Declare Function CreateMutex Lib"kernel32" Alias"CreateMutexA" _
(lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, _
ByVal lpName As String) As Long |
请记住,如果从VB6 IDE创建互斥锁,则该互斥锁属于IDE,并且在停止运行程序时不会被销毁-仅在关闭IDE时才会销毁。
VB代码如下所示:
1
| hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&) |
第一个参数是指向SECURITY_ATTRIBUTES结构的指针。如果您不知道它是什么,则不需要它。传递NULL(0)。
如果调用线程应拥有互斥锁的所有权,则第二个参数为TRUE(非零或1)。 FALSE否则。
第三个参数是互斥体名称,可以为NULL(0),如图所示。如果需要命名的互斥锁,请传入名称(任何唯一的值)。不确定VB包装器是否将长度为前缀的VB字符串类型(BSTR)封送给以空值结尾的Ascii / Unicode字符串,如果不,您需要这样做,并且有许多示例。
祝好运!
好吧,根据文档,它看起来像:
安全属性(可以传递null)
是否最初拥有(可以传递false)
它的名字
高温超导