2009-04-27 68 views
1

非託管C++ DLL有一個導出的功能,接受一個int類型作爲窗把手傳遞視窗處理成非託管的C DLL

void SetWindowHandle(int nHandle); 

其他地方在非託管的DLL的代碼int澆鑄到HWND和是正確使用。

,並從Windows窗體應用程序,我設置手柄如下

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

哪裏_hHandle是類中的私有成員。我的手柄是否正確?看起來像是這樣,但顯然這個應用程序並沒有給出慾望輸出。我懷疑問題在於手柄。 PS:我有權訪問非託管dll,所以我可以在那裏修改任何建議的更改。

回答

1

從表面上看,沒有什麼不對。你沒有顯示整個.Net聲明。有一點需要注意的是調用約定需要匹配。通常的DLL調用約定是stdcall,但這不是C++中的默認值。你必須要求它,通常使用像你在所有Windows頭文件中看到的那樣使用宏WINAPI

由於您有權訪問通話的雙方,爲什麼不用使用調試器來查明您是否正確獲取句柄?設置斷點並檢查變量的值,或將值打印到調試控制檯或文件並檢查結果。

+0

Winforms應用程序也在託管C++中,非託管C++的包裝作爲單獨的類頭/ cpp包含在winforms項目中。 – rptony 2009-04-27 21:42:39

+0

是的,我也得到了DLL裏面的句柄(以及整數);但不知道這是否是一個正確的處理。那麼,讓我在該句柄上調用GetDC,如果它返回正確,那麼它是一個有效的句柄嗎? – rptony 2009-04-27 21:44:53

相關問題