В настоящее время у меня есть пример C ++, вызывающий функцию C ++ DLL следующим образом:
typedef BOOL(__stdcall *f_funci)(const char*, char*);
HINSTANCE hGetProcIDDLL = LoadLibrary(L"myDLL.dll");
f_funci DoSmth= (f_funci)GetProcAddress(hGetProcIDDLL, "function");
std::string test = "The cake is a lie, it's actually a Brownie...";
char *out = new char[124];
DoSmth(&test[0], out);
И прототип функции DLL:
BOOL function(const char *in, char *out){}
Проблема в том, что когда я вызываю эту функцию DLL, я получаю совершенно случайный результат при in[x]
(независимо от значения x
) (с использованием отладчика Visual Studio).
Однако, если я просто вставлю эту функцию в свой .cpp
, in[x]
всегда будет результатом, который я ожидаю получить.
Что я проверил:
- Соглашение о вызове функции DLL - stdcall, как и ожидалось.
- И образец, и DLL находятся в следующем контексте - Debug - x64 -
Я думаю, что это может произойти, но я не знаю достаточно, чтобы обеспечить ответ Да / Нет:
- Разница в управлении памятью между "простым вызовом" и GetProcAddress?
- Ошибка отладчика (было бы странно, учитывая, что значение out также ложно в случае вызова dll)
- Другое
Пожалуйста, рассмотрите вопрос, если что-то неясно.