Показать сообщение отдельно
Старый 06.01.2008, 03:38   #6
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию 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 нармально сделать, с нормальными названиями функций, процедур и тд
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием