Как вызвать 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.
Есть следующие типы соглашений о вызове - register, pascal, cdecl, stdcall и safecall.
По умолчанию для delphi - register
И что значит "не работает". Тут можно предположить много вариантов:
1. Библиотека не экспортирует функцию.
2. Экспорт только по индексу
3. Требуется предварительная инициализации библиотеки через вызов другой функции
и т.д.
У меня есть 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.