LoadLibrary
및 GetProcAddress
을 사용하는 DLL에서 함수를 호출하는 Visual Studio 6 (필자는 FML)에서 작성된 응용 프로그램을 작성하고 있습니다. 최신 코드는 VC6에서 컴파일 할 수 없으며 최신 컴파일러가 필요합니다. DLL에는 C++ 개체를 생성하는 몇 가지 함수가 있으며 VC6 프로그램은 추상 클래스를 통해 개체를 사용합니다.MSVC6는 extern "C"함수의 예외를 어떻게 처리 할 수 있습니까?
이것은 정상적으로 잘 작동하지만 GetProcAddress
에 의해 검색된 함수가 예외를 throw 할 때 문제가 발생합니다. 예외가 DLL 내에서 발견되는 경우에도 문제가 발생합니다. 이 추상 클래스의 메서드를 예외를 throw 할 때 발생하지 않는 것으로 나타났습니다. 이 경우 정상적으로 작동합니다.
내가 뭘 잘못하고 있니? VC6에서 예외를 올바르게 처리 할 코드를 생성하도록하려면 어떻게해야합니까?
편집는 :
extern "C" __declspec(dllexport) Box* getBox(const char* addr)
{
try {
return createBox(addr);
} catch (std::exception& ex) {
LOG_ERROR("Open failed: " << ex.what());
return 0;
} catch (...) {
LOG_ERROR("Error while opening.");
return 0;
}
}
모든 모듈이 msvc 런타임의 동일한 인스턴스를 사용합니까? –
그들은 문제가 아닙니다. –
@Brian DLL에서 모든 처리기를 catch합니까? 예외를 잡지 않는 핸들러의 예제를 볼 수 있습니까? –