将Windows句柄传递给非托管C ++ DLL

时间:2009-04-27 21:10:43

标签: c++ unmanaged managed-c++

非托管C ++ dll有一个导出函数,它将int类型作为window hanlde

void SetWindowHandle(int nHandle);

否则在非托管dll代码中,int会被投放到HWND并正确使用。

从Windows窗体应用程序中,我按如下方式设置句柄

_hHandle = this->Handle.ToInt32();
m_pViewer->SetWindowHandle(_hHandle);

_hHandle是班级内的私人会员。我能正确掌握手柄吗?看起来像是,但显然应用程序没有给出欲望输出。我怀疑问题出在手柄上。

PS:我可以访问非托管dll,因此我可以在那里修改任何建议的更改。

2 个答案:

答案 0 :(得分:1)

从表面上看,没有错。你还没有展示整个.Net声明。需要注意的一点是调用约定需要匹配。 DLL的通常调用约定是 stdcall ,但这不是C ++中的默认值。您必须要求它,通常使用WINAPI宏,就像在所有Windows标题中看到的一样。

由于您可以访问通话的两侧,为什么不使用调试器来确定您是否正确获取了句柄?设置断点并检查变量的值,或将值打印到调试控制台或文件并检查结果。

答案 1 :(得分:1)

问题可能与正在使用的CRT库的不同副本有关吗? http://msdn.microsoft.com/en-us/library/ms235460%28v=VS.90%29.aspx