Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use a mutex in Visual Basic

Tags:

mutex

vb6

I have imported the kernel32 library. So, I have the createMutex function available but I am not quite sure of the various parameters and return values.

This is classic Visual Basic, not Visual Basic.NET but I can probably work with either language in the form of an answer.

like image 721
Goyuix Avatar asked Sep 06 '25 09:09

Goyuix


2 Answers

Here's the VB6 declarations for CreateMutex - I just copied them from the API viewer, which you should have as part of your VB6 installation. VB6 marshalls strings to null-terminated ANSI using the current code page.

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

Bear in mind that if you create a mutex from the VB6 IDE, the mutex belongs to the IDE and won't be destroyed when you stop running your program - only when you close the IDE.

like image 98
MarkJ Avatar answered Sep 11 '25 01:09

MarkJ


The VB code looks something like this:

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

The first parameter is a pointer to an SECURITY_ATTRIBUTES structure. If you don't know what it is, you don't need it. Pass NULL (0).

The second parameter is TRUE (non-zero, or 1) if the calling thread should take ownership of the mutex. FALSE otherwise.

The third parameter is the mutex name and may be NULL (0), as shown. If you need a named mutex, pass the name (anything unique) in. Not sure whether the VB wrapper marshals the length-prefixed VB string type (BSTR) over to a null-terminated Ascii/Unicode string if not, you'll need to do that and numerous examples are out there.

Good luck!


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!