非托管C ++ dll有一个导出函数,它将int类型作为window hanlde
void SetWindowHandle(int nHandle);
否则在非托管dll代码中,int
会被投放到HWND
并正确使用。
从Windows窗体应用程序中,我按如下方式设置句柄
_hHandle = this->Handle.ToInt32();
m_pViewer->SetWindowHandle(_hHandle);
_hHandle
是班级内的私人会员。我能正确掌握手柄吗?看起来像是,但显然应用程序没有给出欲望输出。我怀疑问题出在手柄上。
PS:我可以访问非托管dll,因此我可以在那里修改任何建议的更改。
答案 0 :(得分:1)
从表面上看,没有错。你还没有展示整个.Net声明。需要注意的一点是调用约定需要匹配。 DLL的通常调用约定是 stdcall ,但这不是C ++中的默认值。您必须要求它,通常使用WINAPI
宏,就像在所有Windows标题中看到的一样。
由于您可以访问通话的两侧,为什么不使用调试器来确定您是否正确获取了句柄?设置断点并检查变量的值,或将值打印到调试控制台或文件并检查结果。
答案 1 :(得分:1)
问题可能与正在使用的CRT库的不同副本有关吗? http://msdn.microsoft.com/en-us/library/ms235460%28v=VS.90%29.aspx