Я закончил свое небольшое приложение, и я пытаюсь убедиться, что у меня нет утечек памяти и ошибок.Посмотрев свой вывод, я заметил, что одна из моих функций выдает исключение First-Chance, но функция прекрасно работает и не падает.
Функция вызывает другую функцию в CLR C ++ DLL.Я удалил почти весь код в функции DLL только для теста, и исключение по-прежнему выдается, поэтому я знаю, что проблема заключается в моей функции EXE.
Это код функции EXE для вызова функции DLL.
LPCTSTR CHAXC0RDlg::Encrypt(LPCTSTR strValue)
{
const char* Return;
HINSTANCE hDLL = LoadLibrary(L"Library.dll");
if(hDLL)
{
FARPROC hMethod = GetProcAddress(HMODULE (hDLL), "Encrypt");
if(hMethod)
{
typedef const char* (*FunctionSig)(LPCTSTR);
FunctionSig MethodCall = FunctionSig(hMethod);
Return = MethodCall(strValue);
FreeLibrary(hDLL);
}
}
return _tcsdup(CString(Return));
}
Это функция DLL (как вы можете видеть, я удалил весь код, кроме кода, который генерируетвозвращаемое значение просто в качестве теста):
const char* Encrypt(LPCTSTR strPValue)
{
String^ strValue = gcnew String(strPValue);
string strReturn = (const char*)(Marshal::StringToHGlobalAnsi(strValue)).ToPointer();
char* csValue = new char[strReturn.size()];
strcpy(csValue, strReturn.c_str());
return const_cast<const char*> (csValue);
}
Функция EXE выдает исключение для "const char* Return = MethodCall(strValue);
" (я разрешил разрыв для этого исключения, как я знаю).
Почемуточно ли эта функция вызывает это исключение?
Спасибо!
РЕДАКТИРОВАТЬ
Обновление: мой набор символов имеет UNICODE.
Обновление № 2: Из того, что я прочитал в предложениях и ответах, вы предполагаете, что этот код не работает, но работает.Я включил перерыв для исключений первого шанса (и да, я знаю, что такое исключение первого шанса), потому что я хотел, чтобы эта программа была хорошего качества с устранением всех ошибок.Код работает нормально, я просто хотел выяснить, почему возникает исключение из первого шанса, потому что мне нравится быть лучшим программистом.Поэтому я хотел бы исправить это.
Обновление № 3: Теперь у меня есть код, проверяющий значения hDLL и hMethod, и оба не равны нулю при запуске этой функции.Кажется, проблема в том, что она сама вызывает DLL.Я предполагаю, что сигнатура функции на 100% правильная, поскольку этот код работает, она просто генерирует исключение первого шанса.
Обновление № 4: я добавил новые изменения в свою функцию выше, а также добавил функцию DLLкод.Функция DLL - это библиотека CLR C ++.Я удалил весь код в функции DLL, как я уже говорил, чтобы убедиться, что это не моя DLL.