Я унаследовал старое приложение MFC / Win32 C ++, исходный код которого я не должен редактировать.
Это приложение MFC должно содержать старую библиотеку DLL MFC / Win32 C ++.Эта DLL также пытается выполнять вызовы функций через оболочку смешанного режима в управляемую C ++ / CLI DLL.Я знаю, это звучит немного запутанно, поэтому вот диаграмма того, что я имею в виду:
Old MFC/Win32 Application (NO CLR)
---> Hosting old MFC/Win32 DLL (NO CLR)
---> Making function calls to Mixed-Mode wrapper (CLR)
---> Sending function calls to C++/CLI DLL (CLR)
Моя проблема в настоящее время заключается в том, что когда я пытаюсь смонтировать объект класса оболочки C ++ / CLR, скажем, WrapperClass WC;
, приложение MFC / Win32 встречает «необработанное исключение».
У меня есть ощущение, что мне может потребоваться каким-то образом разместить CLR в отдельном процессе, чтобы создать объект.Это правильная идея?Или я совершенно не в порядке?
Код компилируется во время, и это происходит только во время выполнения.
Есть идеи?
Вот пример кода, который я пытаюсь запустить:
MFC / Win32 DLL
#include "WrapperClass.h"
BOOL Test::bTest() //This function is called elsewhere within MFC/Win32 DLL
{
DWORD dwTest;
WrapperClass WC; //Unhandled exception here!
return WC.FunctionToCall(dwTest); //FunctionToCall is a BOOL
}
Смешанный режимКласс Wrapper
BOOL WrapperClass::FunctionToCall(DWORD dw)
{
GCHandle h = GCHandle::FromIntPtr(IntPtr(m_impl)); //m_impl def'd as void *
CPPCLIClass^ CCC = safe_cast<CPPCLIClass^>(h.Target);
return (BOOL)CCC->FunctionToCall(dw);
}
C ++ / CLI DLL
bool CPPCLIClass::FunctionToCall(UInt32 ui32)
{
if (ui32 == 42)
{
return true;
}
}
ОБНОВЛЕНИЕ: Мне удалось уговорить настоящее исключениевне программы.Сейчас я получаю исключение System.IO.FileNotFound
с дополнительной информацией о том, что
An unhandled exception of type 'System.IO.FileNotFoundException' occured in
Unknown Module.
Additional information: Could not load file or assembly 'CPPCLIProject,
Version=1.0.4351.29839, Culture=neutral, PublicKeyToken=null' or one of its
dependencies. The system cannot find the file specified.
Означает ли это что-нибудь?Я понимаю, что он, очевидно, не может найти CPPCLIProject (Примечание: это не проект оболочки), но тогда, если я буду ссылаться на файл .lib из оболочки Смешанного режима, как я тогда не получу ошибки компоновщика?