Вверх ↑
Этот топик читают: Гость
Ответов: 822
Рейтинг: 96
#1: 2020-10-20 23:33:57 ЛС | профиль | цитата
Не очень понимаю в чем дело но вот дело не работает

иметься UnityPlayer.dll с одной единственной функцией UnityMain которой вроде всё равно кто и как её вызывает, всегда работает.

код на си

HMODULE hDll = LoadLibrary("UnityPlayer.dll");
pFunc UnityMain = (pFunc)GetProcAddress(hDll, "UnityMain");
UnityMain();
FreeLibrary(hDll);

но вот fpc64 выдает кракозябры и floating point overflow
InlineCode для хиасма

unit HiAsmUnit;
interface

uses kol,Share,Debug,windows;

type

THiAsmClass = class(TDebug)
private

public

procedure doLoad(var dt: TData; idx: word);

end;

implementation

procedure THiAsmClass.doLoad;
var
fUnityMain : procedure; cdecl;
LibHandle : THandle;

begin
LibHandle := LoadLibrary(PAnsiChar('UnityPlayer.dll'));

if LibHandle ‹› 0 then
begin
fUnityMain := GetProcAddress(LibHandle, 'UnityMain');
if @fUnityMain ‹› nil then
fUnityMain;
end;
fUnityMain := nil;
FreeLibrary(LibHandle);
end;
end.

по ссылке архив со всем необходимым, (если у вас есть игра на Unity и нужная DLL то архив не нужен)
https://yadi.sk/d/kGlNvPC-0_JEOw

Редактировалось 1 раз(а), последний 2020-10-20 23:35:15
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4308
Рейтинг: 670
#2: 2020-10-21 10:30:37 ЛС | профиль | цитата
typedef void(__stdcall *pFunc)();

pFunc предполагается 'stdcall', а у тебя fUnityMain = 'cdecl'.
карма: 23

0
Ответов: 822
Рейтинг: 96
#3: 2020-10-21 12:03:14 ЛС | профиль | цитата
ставил stdcall результат тот же, поковырявшись с дебагом, выяснил что инициализация DLL проходит успешно, но дальше где то в дебрях DLL-ки вываливается exception, есть предположение что это связано с HeapCreate, HeapAlloc, очевидно я что то не так делаю.. даже в лазарусе падает.

ZLhgMWGsGM.png

Редактировалось 2 раз(а), последний 2020-10-21 23:37:14
карма: 0

0
3
Сообщение
...
Прикрепленные файлы
(файлы не залиты)