Domanda
Ho importato il kernel32
biblioteca.Quindi, ho il createMutex
funzione disponibile ma non sono del tutto sicuro dei vari parametri e dei valori restituiti.
Questo è il classico Visual Basic, non Visual Basic.NET ma probabilmente posso lavorare con entrambi i linguaggi sotto forma di risposta.
Soluzione
Il codice VB è simile al seguente:
hMutex = CreateMutex(ByVal 0&, 1, ByVal 0&)
Il primo parametro è un puntatore a an SECURITY_ATTRIBUTES
struttura.Se non sai di cosa si tratta, non ne hai bisogno.Passa NULL (0).
Il secondo parametro è TRUE
(diverso da zero o 1) se il thread chiamante deve assumere la proprietà del mutex. FALSE
Altrimenti.
Il terzo parametro è il nome del mutex e può essere NULL (0), come mostrato.Se hai bisogno di un mutex con nome, passa il nome (qualsiasi cosa univoca).Non sono sicuro se il VB
wrapper effettua il marshalling della lunghezza con prefisso VB
tipo di stringa (BSTR
) su una stringa Ascii/Unicode con terminazione null, in caso contrario, dovrai farlo e sono disponibili numerosi esempi.
Buona fortuna!
Altri suggerimenti
Ecco le dichiarazioni VB6 per CreaMutex - Li ho appena copiati dal visualizzatore API, che dovresti avere come parte della tua installazione VB6.VB6 effettua il marhalling delle stringhe su ANSI con terminazione null utilizzando la tabella codici corrente.
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
Tieni presente che se crei un mutex dall'IDE VB6, il mutex appartiene all'IDE e non verrà distrutto quando interrompi l'esecuzione del programma, solo quando chiudi l'IDE.
Ebbene, in base a documentazione sembra:
- Attributi di sicurezza (può passare null)
- Se è inizialmente di proprietà (può passare come falso)
- Il nome
HTH