C++ MFC kodumda bir HWND var ve bu HWND'yi bir C# denetimine iletmek ve IntPtr olarak almak istiyorum.HWND'yi IntPtr (CLI) dönüştürün
Kodumda yanlış olan nedir ve nasıl doğru yapabilirim? (Ben CLI işaretçisini yanlış kullanarak bir şey düşünüyorum, çünkü System :: IntPtr^System :: IntPtr dönüştürebilirsiniz bir hata alıyorum. Ama tam olarak düzgün çalışması için tam olarak nasıl bilmiyorum ...)
Benim C++ MFC kodu:
HWND myHandle= this->GetSafeHwnd();
m_CLIDialog->UpdateHandle(myHandle);
Benim C# kodu:
public void UpdateHandle(IntPtr mHandle)
{
......
}
Benim CLI kodu:
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);
}
Hata ben CLI kodunu değiştirmek durumunda şu anda m_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
olur (IntPtr^IntPtr dönüştürmek olamaz):
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);
}
Yani bu durumda C# kazanılmış değer 0.
olduğunuDüzgün çalışmasını nasıl sağlayabilirim?
can hatayı çoğaltmak için yanı sıra hatanın tam olarak nerede meydana geldiğini söylemek için en az kod göndermek? – stijn