Mam HWND w moim kodzie C++ MFC, i chcę przekazać ten HWND do kontrolki C# i uzyskać go jako IntPtr.Konwertuj HWND na IntPtr (CLI)
Co jest nie tak w moim kodzie i jak mogę to zrobić poprawnie? (Myślę, że jest to coś z niewłaściwym użyciem wskaźników CLI, ponieważ pojawia się błąd, którego nie można przekonwertować z System :: IntPtr^na System :: IntPtr. Ale nie wiem jak dokładnie to wszystko działa poprawnie ...) Kod
My C++ MFC:
HWND myHandle= this->GetSafeHwnd();
m_CLIDialog->UpdateHandle(myHandle);
Mój kod C#:
public void UpdateHandle(IntPtr mHandle)
{
......
}
Mój kod 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);
}
Błąd (nie można przekonwertować z IntPtr^do IntPtr) Obecnie występuje na m_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
przypadku zmiany kodu CLI do:
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);
}
Więc w tym przypadku wartość zdobyć w C# 0.
Jak mogę sprawić, aby działał poprawnie?
może cię opublikować minimalny kod, aby odtworzyć błąd, a także określić, gdzie dokładnie wystąpił błąd? – stijn