Показать сообщение отдельно
Старый 03.09.2004, 05:50     # 1
SwiMMeR
::VIP::
Отыпный Саводод
 
Аватар для SwiMMeR
 
Регистрация: 27.10.2002
Адрес: Краснодар, Россия
Пол: Male
Сообщения: 452

SwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собойSwiMMeR Имеются все основания чтобы гордиться собой
Как работать с мьютексами в VB .Net?

Долго парился ... не могу найти проблему ....

Суть задачи проста, а именно нужно написать процедуру, которая проверяла бы запущено ли приложение.

В VFP эту проблему решал и решил успешно через мьютексы. Теперь возникла та же проблема в Басике .Нет

написал следующее:
Код:
 Public Sub Start_Alone()
  If OpenMutex(1, False, "qq") > 0 Then
   MsgBox("Программа уже запущена!", 16, "")
   End
  Else
   Dim S_A As SECURITY_ATTRIBUTES
   CreateMutex(S_A, True, "qq")
  End If
 End Sub
не работает в том смысле, что мьютекс создается (потому что результат выполнения CreateMutex больше нуля), но результат выполнения OpenMutex всегда равен нулю

т.е. я запускаю прогу с месаджем и она ждет нажатия копки ок (мессадж вызывается после создания мьютекса) ... потом запускаю второй экземпляр проги и она создает новый мьютекс, потому что не видит первого

GetLastError показывает код 2 типа File_not_found ...

В чем проблема? И есть ли альтернативные способы решения задачи в Басике .Нет?

Решение проблемы
)
оказалось проблема была в другом месте ...

описание функции CreateMutex было взято следующее
Цитата:
Public Structure SECURITY_ATTRIBUTES
Dim nLength As Integer
Dim lpSecurityDescriptor As Integer
Dim bInheritHandle As Integer
End Structure

Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Integer, ByVal lpName As String) As Integer
оно оказалось, не совсем верным ...
надо было сделать так
Цитата:
Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal lpMutexAttributes As String, ByVal bInitialOwner As Integer, ByVal lpName As String) As Integer
и после этого преобразуя код в следующее все начинает работать
Код:
 Public Sub Start_Alone()
  If OpenMutex(1, False, "qq") > 0 Then
   End
  Else
   Dim s_a as string
   CreateMutex(s_a, True, "qq")
  End If
 End Sub
__________________
The Information will be FREE!

Последний раз редактировалось SwiMMeR; 03.09.2004 в 05:47.
SwiMMeR вне форума