我导入了kernel32库。 所以,我有createMutex函数可用,但我不太确定各种参数和返回值。

这是经典的Visual Basic,而不是Visual Basic.NET,但我可能会以答案的形式使用这两种语言。

===============>>#1 票数:9

这是CreateMutex的VB6声明 - 我只是从API查看器中复制它们,您应该将其作为VB6安装的一部分。 VB6使用当前代码页将字符串编组为以空值终止的ANSI。

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时。

===============>>#2 票数:7 已采纳

VB代码看起来像这样:

hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&)

第一个参数是指向SECURITY_ATTRIBUTES结构的指针。 如果你不知道它是什么,你就不需要它。 传递NULL(0)。

如果调用线程应取得互斥锁的所有权,则第二个参数为TRUE (非零或1)。 否则为FALSE

第三个参数是互斥锁名称,可以是NULL(0),如图所示。 如果你需要一个命名的互斥锁,请传入名称(任何唯一的)。不确定VB包装器是否将长度为前缀的VB字符串类型( BSTR )编组为以空终止的Ascii / Unicode字符串,如果没有,则需要要做到这一点,那里有很多例子。

祝好运!

===============>>#3 票数:1

好吧,根据文档看起来像:

  1. 安全属性(可以传递null)
  2. 它是否最初拥有(可以传递假)
  3. 它的名字

HTH

  ask by Goyuix translate from so

未解决问题?本站智能推荐:

关注微信公众号