Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在ATL DLL中获取HWND(用于SendMessage或PostMessage)_C++_Vb.net_Visual C++_Dll_Atl - Fatal编程技术网

C++ 如何在ATL DLL中获取HWND(用于SendMessage或PostMessage)

C++ 如何在ATL DLL中获取HWND(用于SendMessage或PostMessage),c++,vb.net,visual-c++,dll,atl,C++,Vb.net,Visual C++,Dll,Atl,我想在ATL DLL中获取线程中SendMessage或PostMessage函数的HWND。 但是,ATL DLL没有窗口 如何在ATL DLL中获取HWND? 项目应用程序设置:DLL(动态链接库),安全开发生命周期,(不支持MFC) 类选项:单元、聚合是、双接口、连接点 HelloCtrl.cpp(VB客户端正在处理ShowMessage()) HelloCtrl.h #define WM_THREADFIREEVENT (WM_USER+1) BEGIN_MSG_MAP(CHelloC

我想在ATL DLL中获取线程中SendMessage或PostMessage函数的HWND。 但是,ATL DLL没有窗口

如何在ATL DLL中获取HWND?

项目应用程序设置:DLL(动态链接库),安全开发生命周期,(不支持MFC)
类选项:单元、聚合是、双接口、连接点

HelloCtrl.cpp
(VB客户端正在处理ShowMessage())

HelloCtrl.h

 #define WM_THREADFIREEVENT (WM_USER+1)
BEGIN_MSG_MAP(CHelloCtrl)
    CHAIN_MSG_MAP(CComControl<CHelloCtrl>)
    DEFAULT_REFLECTION_HANDLER()
    MESSAGE_HANDLER(WM_THREADFIREEVENT, OnLeftButtonDown)
END_MSG_MAP()

public:
    STDMETHOD(ShowMessage)(BSTR bstrCaption, VARIANT_BOOL* lpvbResult);
    LRESULT OnLeftButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
    void LeftButton();
private:
    HANDLE m_hThread_ReadData;
    static DWORD WINAPI T_ReadData(LPVOID pParam);
#定义WM_THREADFIREEVENT(WM_用户+1)
开始消息映射(CHelloCtrl)
链图(CComControl)
默认反射处理程序()
消息处理程序(WM_THREADFIREEVENT,OnLeftButtonDown)
END_MSG_MAP()
公众:
STDMETHOD(ShowMessage)(BSTR BSTR选项,变量布尔*lpvbResult);
LRESULT OnLeftButtonDown(UINT/*uMsg*/,WPARAM/*WPARAM*/,LPARAM/*LPARAM*/,BOOL&/*bHandled*/);
void LeftButton();
私人:
处理m_hThread_ReadData;
静态DWORD WINAPI T_读取数据(LPVOID pParam);

窗口是进程或模块可能拥有或不拥有的对象,或者如果需要,它可以创建一个对象。也就是说,如果不指定您要查找的窗口类型及其
HWND
句柄,您的问题就没有答案。DLL和HWND是不相关的

从上下文来看,您似乎需要一个窗口,可以使用该窗口进行消息传递和在线程之间传输执行控制。也就是说,您可以在某个地方发布,然后在其他地方处理,将线程魔法留给windowsapi

在这种情况下,您可以重用现有窗口中的一个,例如为ActiveX控件创建的窗口,您只需创建自己的窗口即可完全控制并用于您的目的。对于后者,你从中得到了。。。看见前者可能更简单,但可能不是:ActiveX控件不必有窗口,在这种情况下,它们是无窗口控件。同时,您可以选择使用强制窗口控件,请参见。

如果没有窗口,则没有hWnd。
 #define WM_THREADFIREEVENT (WM_USER+1)
BEGIN_MSG_MAP(CHelloCtrl)
    CHAIN_MSG_MAP(CComControl<CHelloCtrl>)
    DEFAULT_REFLECTION_HANDLER()
    MESSAGE_HANDLER(WM_THREADFIREEVENT, OnLeftButtonDown)
END_MSG_MAP()

public:
    STDMETHOD(ShowMessage)(BSTR bstrCaption, VARIANT_BOOL* lpvbResult);
    LRESULT OnLeftButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
    void LeftButton();
private:
    HANDLE m_hThread_ReadData;
    static DWORD WINAPI T_ReadData(LPVOID pParam);