У меня есть HWND в моем коде MFC CFC, и я хочу передать этот HWND на элемент управления С# и получить его как IntPtr.
Что не так в моем коде, и как я могу сделать это правильно? (Я думаю, что-то с неправильным использованием указателей CLI, потому что я получаю сообщение об ошибке, которое он не может преобразовать из System:: IntPtr ^ в System:: IntPtr. Но я не знаю, как именно заставить все работать правильно...)
Мой код С++ MFC:
HWND myHandle= this->GetSafeHwnd();
m_CLIDialog->UpdateHandle(myHandle);
Мой код С#:
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);
}
Итак, в этом случае значение, полученное в С#, равно 0.
Как я могу заставить его работать правильно?