Как использовать мьютекс в Visual Basic

Я импортировал kernel32 библиотеку. Итак, у меня есть createMutex функция, но я не совсем уверен в различных параметрах и возвращаемых значениях.

Это классический Visual Basic, а не Visual Basic.NET, но я, вероятно, смогу работать с любым языком в форме ответа.

Ответов (3)

Решение

Код VB выглядит примерно так:

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

Первый параметр - это указатель на SECURITY_ATTRIBUTES структуру. Если вы не знаете, что это, вам это не нужно. Передайте NULL (0).

Второй параметр - TRUE (ненулевое значение или 1), если вызывающий поток должен владеть мьютексом. FALSE иначе.

Третий параметр - это имя мьютекса и может иметь значение NULL (0), как показано. Если вам нужен именованный мьютекс, передайте его имя (что-нибудь уникальное). Не уверен, что VB оболочка маршалирует VB строку с префиксом длины type ( BSTR ) в строку Ascii / Unicode с завершающим нулем, если нет, вам нужно это сделать и существует множество примеров.

Удачи!

Судя по документации, это выглядит так:

  1. Атрибуты безопасности (может передавать значение null)
  2. Независимо от того, принадлежит ли он изначально (может передаваться false)
  3. Название этого

HTH

Вот объявления VB6 для CreateMutex - я просто скопировал их из программы просмотра 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.