неуправляемый c ++ dll, вызываемый из c #, вылетает при использовании CString в dll - PullRequest
1 голос
/ 11 февраля 2010

Привет, самые превосходные Stackoverflowians

Использование Visual Studio 2008 Team System,

У меня есть c ++ dll (статически связанная регулярная dll mfc), которая имеет простую функцию

extern "C" __declspec(dllexport) int MyExportedFunction( )
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

   CString tempString ;
....
}

DLLImport из приложения c # в dll работает, и я могу войти в эту функцию из отладчика из моего кода c # Однако (да, вот оно!) внутри функции "MyExportedFunction", как вы можете видеть, я создаю экземпляр CString, и когда это создание экземпляра CString выполняется, происходит сбой всего приложения и отладчик дает мне

"Невозможно выполнить шаг. Процесс был прерван обновить список процессов перед попыткой другого присоединения "

Кто-нибудь есть какие-либо предложения относительно того, что я мог бы сделать, чтобы решить эту проблему?

С уважением Buzz

1 Ответ

1 голос
/ 11 февраля 2010

Программы MFC нуждаются в экземпляре объекта CWinApp, App, который управляет новыми и удаляет.

Обычные библиотеки DLL MFC определяют свой собственный объект theApp, а библиотеки расширений MFC используют "theApp" другого модуля.

Я думаю, что ваш сбой согласуется с отсутствующим / не инициализированным "theApp". В этом случае выделение памяти завершится неудачно, а CString использует выделение памяти.

Две возможности:

  • Вы вызываете расширение DLL MFC из .СЕТЬ. (расширение DLL не предоставить свое собственное приложение)

  • Вы вызываете обычную MFC DLL, где объект theApp не инициализирован должным образом.

...