1

非托管 C++ dll 有一个导出函数,它采用 int 类型作为窗口句柄

void SetWindowHandle(int nHandle);

否则,在非托管 dll 代码中,它int被强制转换为HWND并正确使用。

从 windows 窗体应用程序中,我将句柄设置如下

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

_hHandle类中的私有成员在哪里。我的手柄正确吗?似乎是这样,但显然应用程序没有给出期望的输出。我怀疑问题出在手柄上。

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

4

2 回答 2

1

从表面上看,并没有错。您还没有显示整个 .Net 声明。需要注意的一件事是调用约定需要匹配。DLL 的常用调用约定是stdcall,但这不是 C++ 中的默认设置。您必须要求它,通常使用WINAPI您在所有 Windows 标头中看到的宏。

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

于 2009-04-27T21:30:33.883 回答
1

该问题是否与所使用的 CRT 库的不同副本有关? http://msdn.microsoft.com/en-us/library/ms235460%28v=VS.90%29.aspx

于 2011-02-01T21:50:15.660 回答