Ho un HWND nel mio codice MFC C++ e voglio passare questo HWND a un controllo C# e ottenerlo come IntPtr.Conversione da HWND a IntPtr (CLI)
Cosa c'è di sbagliato nel mio codice e come posso farlo correttamente? (Penso che sia qualcosa con l'uso errato dei puntatori CLI, perché ottengo un errore che non può convertire da System :: IntPtr^a System :: IntPtr. Ma non so esattamente come far funzionare tutto correttamente ...) codice
mio C++ MFC:
HWND myHandle= this->GetSafeHwnd();
m_CLIDialog->UpdateHandle(myHandle);
Il mio codice C#:
public void UpdateHandle(IntPtr mHandle)
{
......
}
Il mio codice 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);
}
errore (non può convertire da IntPtr^a IntPtr) attualmente si verifica su m_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
se cambio il codice CLI per:
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);
}
Quindi, in questo caso il valore ottenuto in C# è 0.
Come posso farlo funzionare correttamente?
si può inserisci il codice minimo per riprodurre l'errore, oltre a indicare dove si verifica esattamente l'errore? – stijn