@alex123321123

Как вызвать delphi функцию из C++, у которой не указано stdcall?

Пробовал использовать __fastcall, но всё равно не работает.

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

function TestRunMethod2(x1 :Integer):Integer; export;
begin
Result := x1;
end;

Код С++:
HMODULE mod = LoadLibraryW(L"Project12.dll");
typedef int (__fastcall *f_funci)(int x1);
f_funci funci = (f_funci)GetProcAddress(mod, "TestRunMethod2");

register - это ведь fastcall?

Не работает в данном случае - вместо результата возвращает 0. Если объявить как stdcall и там и там, всё нормально. Но мне нужно будет вызвать функцию, которая не объявлена как stdcall.
  • Вопрос задан
  • 290 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
Есть следующие типы соглашений о вызове - register, pascal, cdecl, stdcall и safecall.
По умолчанию для delphi - register

И что значит "не работает". Тут можно предположить много вариантов:
1. Библиотека не экспортирует функцию.
2. Экспорт только по индексу
3. Требуется предварительная инициализации библиотеки через вызов другой функции
и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы