Tôi có HWND trong mã C + + MFC, và tôi muốn chuyển HWND này cho điều khiển C# và lấy nó làm IntPtr.Chuyển đổi HWND thành IntPtr (CLI)
Điều gì sai trong mã của tôi và làm cách nào để tôi có thể thực hiện chính xác? (Tôi nghĩ rằng đó là một cái gì đó sai với việc sử dụng các con trỏ CLI, vì tôi nhận được một lỗi rằng nó không thể chuyển đổi từ System :: IntPtr^sang System :: IntPtr. Nhưng tôi không biết chính xác làm thế nào để làm cho nó hoạt động đúng cách ...) mã
My C++ MFC:
HWND myHandle= this->GetSafeHwnd();
m_CLIDialog->UpdateHandle(myHandle);
My C# code:
public void UpdateHandle(IntPtr mHandle)
{
......
}
đang CLI của tôi:
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);
}
Lỗi (không thể chuyển đổi từ IntPtr^để IntPtr) hiện xảy ra trên m_pManagedData->CSharpControl->UpdateHandle(managedhWnd);
nếu tôi thay đổi mã 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);
}
Vì vậy, trong trường hợp này, giá trị nhận được trong C# là 0.
Tôi làm cách nào để hoạt động chính xác?
thể bạn đăng mã tối thiểu để tạo lại lỗi, cũng như cho biết lỗi xảy ra chính xác ở đâu? – stijn