2008-08-04 10 views
20

Ich habe die kernel32-Bibliothek importiert. Also, ich habe die createMutex Funktion verfügbar, aber ich bin nicht ganz sicher von den verschiedenen Parametern und Rückgabewerten.Verwendung eines Mutex in Visual Basic

Dies ist klassische Visual Basic, nicht Visual Basic.NET, aber ich kann wahrscheinlich mit jeder Sprache in Form einer Antwort arbeiten.

Antwort

7

Der VB-Code sieht in etwa so aus:

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

Der erste Parameter ist ein Zeiger auf eine SECURITY_ATTRIBUTES Struktur. Wenn Sie nicht wissen, was es ist, brauchen Sie es nicht. Übergeben Sie NULL (0). Der zweite Parameter ist TRUE (ungleich Null oder 1), wenn der aufrufende Thread den Besitz des Mutex übernehmen soll. FALSE sonst.

Der dritte Parameter ist der Mutex-Name und möglicherweise NULL (0), wie gezeigt. Wenn Sie einen benannten Mutex benötigen, geben Sie den Namen (alles eindeutige) ein. Nicht sicher, ob der Wrapper VB den String-Typ (BSTR) auf eine nullterminierte ASCII/Unicode-Zeichenfolge umleitet, falls nicht Dafür gibt es zahlreiche Beispiele.

Viel Glück!

2

Nun, auf der Grundlage der documentation es aussieht:

  1. Sicherheitsattribute (kann null übergeben)
  2. Ob es ursprünglich im Besitz ist (kann falsch passieren)
  3. Der Name es

HTH

9

Hier sind die VB6-Deklarationen für CreateMutex - ich habe sie einfach aus dem API-Viewer kopiert, die Sie als Teil Ihrer VB6-Installation haben sollten. VB6 Marshalls Zeichenketten auf Null-terminierte ANSI mithilfe der aktuellen Codepage.

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 

Beachten Sie, dass, wenn Sie einen Mutex aus der VB6 IDE erstellen, die Mutex der IDE gehört und nicht zerstört werden, wenn Sie Ihr Programm nicht mehr ausgeführt - nur, wenn Sie die IDE schließen.