Vb6 无法在C+;之间共享Windows事件内核对象+;和VB进程 我在Windows 7 X64中,试图在2个进程之间使用相同的事件对象,一个是VB应用程序,另一个是C++应用程序,但似乎在一个进程中创建的事件不能在另一个进程中识别:

Vb6 无法在C+;之间共享Windows事件内核对象+;和VB进程 我在Windows 7 X64中,试图在2个进程之间使用相同的事件对象,一个是VB应用程序,另一个是C++应用程序,但似乎在一个进程中创建的事件不能在另一个进程中识别:,vb6,kernel,Vb6,Kernel,VB Option Explicit Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Declare Function OpenEvent Lib "Kernel32" Alias "OpenEventW" (ByVal dwDesiredAccess As Long, ByVal

VB

Option Explicit

Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type

Private Declare Function OpenEvent Lib "Kernel32" Alias "OpenEventW" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, lpName As String) As Long


Const EVENT_ALL_ACCESS = &H1F0003

Sub Testing()
    Dim hCallEvent As Long
    hCallEvent = OpenEvent(EVENT_ALL_ACCESS, 0, "GUID_Call_Event")
End Sub


Private Sub Form_Load()
    Call Testing
End Sub
C++

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hEvent = ::CreateEvent(NULL, FALSE, FALSE, _T("GUID_Call_Event"));

    DWORD dwError = ::GetLastError();
    return 0;
}

现在,如果我启动C++应用程序创建事件,然后启动VB应用程序来获得该事件,则它仅用错误消息失败:“系统找不到指定的文件。” 注意:

  • 在与C++进程交互时,VB和VBA都失败了,但是在2个C++进程
  • 之间成功了 <> LI>在VB中创建的事件也不能在C++进程中被识别。

您对此有什么想法吗?

您正在尝试在VB6中使用
OpenEventW

很可能,您实际上想要使用
OpenEventA
,在这种情况下,声明必须如下所示:

Private Declare Function OpenEvent Lib "Kernel32" Alias "OpenEventA" _
  (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long 
但是,如果确实要使用OpenEventW,则必须执行以下操作:

Private Declare Function OpenEvent Lib "Kernel32" Alias "OpenEventW" _
  (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As Long) As Long 
然后

hCallEvent = OpenEvent(EVENT_ALL_ACCESS, 0, StrPtr("GUID_Call_Event"))

顺便说一句,strprtr可以从一个字符串中获取地址,是否有一个内置函数可以从一个地址中获取一个字符串(用long表示)?@Dbger:有人问这个问题:)是的,我问:)似乎没有内置函数。非常感谢您对我的VB问题的帮助:)