2008-08-04 5 views
20

J'ai importé la bibliothèque kernel32. Donc, j'ai la fonction createMutex disponible mais je ne suis pas tout à fait sûr des différents paramètres et des valeurs de retour.Comment utiliser un mutex dans Visual Basic

Ceci est classique Visual Basic, pas Visual Basic.NET mais je peux probablement travailler avec l'un ou l'autre langue sous la forme d'une réponse.

Répondre

7

Le code VB ressemble à ceci:

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

Le premier paramètre est un pointeur vers une structure SECURITY_ATTRIBUTES. Si vous ne savez pas ce que c'est, vous n'en avez pas besoin. Passez NULL (0).

Le deuxième paramètre est TRUE (non nul, ou 1) si le thread appelant doit devenir propriétaire du mutex. FALSE sinon.

Le troisième paramètre est le nom mutex et peut être NULL (0), comme indiqué. Si vous avez besoin d'un mutex nommé, passez le nom (quelque chose d'unique). Vous ne savez pas si le wrapper VB assemble le type de chaîne VB préfixé par la longueur (BSTR) sur une chaîne Ascii/Unicode à terminaison nulle, sinon, vous aurez besoin pour faire cela et de nombreux exemples sont là-bas.

Bonne chance!

2

Eh bien, sur la base documentation il ressemble:

  1. attributs de sécurité (peut passer null)
  2. Que ce soit d'abord détenu (peut passer false)
  3. Le nom de celui-ci

HTH

9

Voici les déclarations VB6 pour CreateMutex - Je viens de les copier depuis la visionneuse API, que vous devriez avoir dans le cadre de votre installation de VB6. VB6 marshalls chaînes à ANSI à terminaison nulle en utilisant la page de codes en cours.

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 

Gardez à l'esprit que si vous créez un mutex à partir de l'IDE VB6, le mutex appartient à l'IDE et ne sera pas détruit lorsque vous arrêtez l'exécution de votre programme - que lorsque vous fermez l'IDE.