C++ MFC コードに HWND があり、この HWND を C# コントロールに渡し、IntPtr として取得したいと考えています。
コードのどこが間違っていますか?どうすれば正しく実行できますか? (System::IntPtr^ から System::IntPtr に変換できないというエラーが表示されるため、CLI ポインターの使用が間違っていると思います。しかし、すべてを適切に機能させる方法が正確にはわかりません。 ..)
私のC++ MFCコード:
HWND myHandle= this->GetSafeHwnd();
m_CLIDialog->UpdateHandle(myHandle);
私のC#コード:
public void UpdateHandle(IntPtr mHandle)
{
......
}
私のCLIコード:
void CLIDialog::UpdateHandle(HWND hWnd)
{
System::IntPtr^ managedhWnd = gcnew System::IntPtr();
HWND phWnd; // object on the native heap
try
{
phWnd = (HWND)managedhWnd->ToPointer();
*phWnd = *hWnd; //Deep-Copy the Native input object to Managed wrapper.
m_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
}
エラー (IntPtr^ から IntPtr に変換できません) が現在発生していますm_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
CLI コードを次のように変更した場合:
void CLIDialog::UpdateHandle(HWND hWnd)
{
System::IntPtr managedhWnd;
HWND phWnd; // object on the native heap
try
{
phWnd = (HWND)managedhWnd.ToPointer();
*phWnd = *hWnd; //Deep-Copy the Native input object to Managed wrapper.
m_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
}
したがって、この場合、C# で取得される値は 0 です。
どうすれば適切に動作させることができますか?