2013-06-25 3 views
0

Я получаю это исключение:Необработанное исключение при KernelBase.dll при запуске моего CLR проекта

Необработанное исключение в 0x75374B32 (KernelBase.dll) в LogLoaderUnmanaged.exe: 0xE0434352 (параметры: 0x80070002, 0x00000000 , 0x00000000 , 0x00000000, 0x74040000).

Когда я называю мой CLR проект с использованием этого кода (часть проекта приложения типа .exe):

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    _tprintf_s(_T("Press enter to start logging messages.")); 
    _getch(); 
    std::string app("Application"); 
    std::string domain("Domain"); 
    std::string message("Message"); 
    UnmanagedLoggerClient::LogError(Debug, app.c_str(), domain.c_str(), message.c_str()); 
    _tprintf_s(_T("Done.")); 
} 

Ошибка при вызове LogError, который определен в заголовке моей CLR библиотеки DLL следующим образом:

#ifdef UNMANAGEDLOGGERCLIENT_EXPORTS 
#define WIN32PROJECT_API __declspec(dllexport) 
#else 
#define WIN32PROJECT_API __declspec(dllimport) 
#endif 

enum UnmanagedLogLevel 
{ 
    Debug = 0, 
    Error = 1 
}; 

static class WIN32PROJECT_API UnmanagedLoggerClient 
{ 
public: 
    static void LogError (UnmanagedLogLevel level, const char* app, const char* domain, const char* message); 
}; 

в реализации метода довольно проста:

void UnmanagedLoggerClient::LogError(UnmanagedLogLevel level, const char* app, const char* domain, const char* message) 
{ 
    LoggerClient::LogLevel logLevel = static_cast<LoggerClient::LogLevel>(level); 
    LoggerClient::Logger::LogError(logLevel, gcnew String(app), gcnew String(domain), gcnew String(message), DateTime::Now); 
} 

Любые идеи, почему это происходит? Я не очень-то парень из C++, и я не нашел никакой полезной информации для поиска этой проблемы в Интернете. Большое спасибо за любой вклад!

+0

@ HansPassant - Ты герой. Я чувствую себя таким глупым, не проверяя, что представляет 0x80070002. Именно поэтому он не работал. Выходной каталог не был тем же самым каталогом, что и двоичный каталог, где находятся все зависимости. Пожалуйста, разместите свой ответ в качестве решения, чтобы я мог установить его как правильный ответ! – Alexandru

ответ

4

Вы используете очень хрупкий способ для инициализации CLR, поэтому диагностика оставляет желать лучшего. В вашей диагностике исключений есть код ошибки «Файл не найден», код ошибки 0x80070002.

Вам удалось запустить CLR, код исключения - управляемое исключение, но он не смог найти файл. Убедитесь, что все исполняемые файлы присутствуют в том же каталоге, что и ваш EXE. Используйте ProcMon SysInternals, если это не поможет, вы увидите, что он ищет файл и не находит его.