ПолезностиИсключительно для полезных тем из других разделов. Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
Ну вроде описал классы, экспорт функции недопонял до конца и как ее использовать :\ уже все перепробывал, вот хотелось бы чтоб выложили исходник показывающий пример использования хотя бы одной функции, а дальше думаю разберусь...
Функцию экспортирую так, но чую что неправильно :-]:
function GetUser(ID: integer): User; stdcall; external 'Engine.dll' name 'GetUser';
Так же ГолдФинч давал вот это, я так и не понял как этим пользоватся ><
function foo(obj:TObj , arg1:T1, arg2:T2);stdcall;
asm
pop eax //адрес возврата, временно сохраняем в eax
pop ecx //аргумент obj, записываем в ecx как того требует __thiscall
push eax //записываем сохраненный адрес возврата
jmp [foo] //вызываем метод
end;
не... да я уже много че и как перепробывал... нужно экспортировать функцию и описать класс User, не? У меня голова просто уже совсем не варит. Или я походу вообще делаю что то не так, выложите лучше пример чтоли, как использовать хоть одну функцию... а то надоело все наугад делать :\
которая собсно всего лишь прослойка к полноценной функции UNetworkHandler_AddNetworkQueue_New:
delphi Код:
procedure UNetworkHandler_AddNetworkQueue_New(unh: Integer; np: PNetworkPacket); stdcall;
begin// тут код для логирования того что пришло в функцию// сохраняем указатель на объект UNetworkHandler
nh:=Pointer(unh);
// Вызываем клиентскую UNetworkHandler::AddNetworkQueue
UNetworkHandler_AddNetworkQueue_Call(np);
end;
ну просто для импорта достаточно засунуть в UNetworkHandler_AddNetworkQueue_Original указатель на UNetworkHandler::AddNetworkQueue и вызвать UNetworkHandler_AddNetworkQueue_Call, короче примерно так:
delphi Код:
var
nh: Pointer; // <-- в эту переменную надо засунуть указатель на объект UNetworkHandler
UNetworkHandler_AddNetworkQueue_Original: procedure(NetworkPacket: Pointer); stdcall;
procedure UNetworkHandler_AddNetworkQueue_Call(NetworkPacket: Pointer); stdcall;
asm
mov ecx, nh
mov esp, ebp
pop ebp
jmp [UNetworkHandler_AddNetworkQueue_Original]
end;
begin
UNetworkHandler_AddNetworkQueue_Original:=GetProcAddress('engine.dll','?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z');
// вызываем импортированную функцию
UNetworkHandler_AddNetworkQueue_Call(параметр);
end.
Добавлено через 4 минуты
UNetworkHandler_AddNetworkQueue_Hook и UNetworkHandler_AddNetworkQueue_Call прослойки нужные для того чтоб перейти от thiscall к stdcall соглашению
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Последний раз редактировалось xkor, 18.12.2009 в 00:35.
Причина: Добавлено сообщение