Разница между вызовом «проектной» функции и вызовом DLL-функции - PullRequest
0 голосов
/ 27 августа 2018

В настоящее время у меня есть пример 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)
  • Другое

Пожалуйста, рассмотрите вопрос, если что-то неясно.

1 Ответ

0 голосов
/ 28 августа 2018

Хм ... Я нашел решение, но я не знаю, как оно могло что-то решить ...

Я на самом деле просто перекомпилировал dll (используя те же опции, тот же формат и прочее), и теперь результаты в порядке, и он работает хорошо.

Если у кого-то есть объяснение или ключ к этому, я в.

Спасибо за все ответы и помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...