Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
|
Re: Запуск dll или exe из L2PacketHack
Вот что нашел, может подойдет тебе.
Цитата:
Merdek 16 ноя 2007, 11:10
Проблема использования DLL написанной в Delphi.
Скомпелированная DLL лежит в той же папке, что и PacketHack 1.3.8
При вызове "CallFunction" вылетает ошибка "Invalid Argument".
Подскажите что не так...
Код:
Код DLL-ки в Delphi
library DLL;
uses
SysUtils,Classes;
function Str1(b:integer): string;
stdcall;
begin
if b=0 then
result := '1!'
else
result := '2!';
end;
exports
Str1 index 1 name 'op';
begin
end.
Код:
Код скрипта
var
lib, lib1:Integer;
Res:variant;
ar:array of variant;
str1: string;
procedure Init;
begin
str1:='0';
lib := loadLibrary('User32.dll');
lib1 := loadLibrary('DLL.dll');
Res:= CallFunction(lib1,'op',1,[0]);
str1:=Res;
Res := CallFunction(lib,'MessageBoxW',4,[nil,str1,'text2',0]);
FreeLibrary(lib);
FreeLibrary(lib1);
end;
begin
end;
dmitry501 16 ноя 2007, 12:24
Это кто тебя учил использовать дельфийские стринги без sharemem?
Почитай, что пишет Делфи, когда создаешь пустую dll
а лучше используй array of char с ручным управление памятью, как в классическом С.
Посмотри, как используются системные .dll, сначала подготавливаются буфера, а потом вызываются dll, причем передаются указатели на буфер.
Br1nk 11 дек 2007, 12:00
Если твоя строка будет меньше 256 символов, ты можешь вместо string использовать shortstring, не изменяя более ничего в программе.
function Str1(b:integer): shortstring;
Код:
//by Angel
Да дело не в сложности, а в удобо читаемости и в скорости работы.
dll не так уж сложно привязать (подгрузить к процесу).
пример привязки dll от xkor
Код:
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
begin
lib := loadLibrary('User32.dll'); <--- -- привязка dll
|
lib1 := loadLibrary('GDI32.dll'); <---
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end.
главно dll нармально сделать, с нормальными названиями функций, процедур и тд
|
|