Передача дескриптора Windows в неуправляемую DLL C ++ - PullRequest
1 голос
/ 28 апреля 2009

Неуправляемая DLL C ++ имеет экспортированную функцию, которая принимает тип int в качестве окна hanlde

void SetWindowHandle(int nHandle);

в других случаях, когда в неуправляемом коде dll int приводится к HWND и используется правильно.

И из приложения Windows Form я устанавливаю дескриптор следующим образом

_hHandle = this->Handle.ToInt32();
m_pViewer->SetWindowHandle(_hHandle);

Где _hHandle - закрытый член класса. Я правильно получаю ручку? Кажется, что это так, но, очевидно, приложение не дает желаемого результата. Я подозреваю, что проблема с ручкой.

PS: у меня есть доступ к неуправляемой DLL, так что я могу внести изменения там для любых предложенных изменений.

Ответы [ 2 ]

1 голос
/ 02 февраля 2011

Может ли проблема быть связана с различными копиями используемой библиотеки CRT? http://msdn.microsoft.com/en-us/library/ms235460%28v=VS.90%29.aspx

1 голос
/ 28 апреля 2009

На первый взгляд, в этом нет ничего плохого. Вы не показали всю декларацию .Net. Одна вещь, на которую следует обратить внимание, это то, что соглашения о вызовах должны совпадать. Обычное соглашение о вызовах для DLL - stdcall , но в C ++ это не по умолчанию. Вы должны попросить об этом, обычно используя макрос WINAPI, как вы видите во всех заголовках Windows.

Поскольку у вас есть доступ к обеим сторонам вызова, почему бы вам не использовать отладчик , чтобы выяснить, правильно ли вы получаете дескриптор? Либо установите точки останова и проверьте значения переменных, либо распечатайте значения в консоли отладки или в файле и проверьте результаты.

...