Page 1 of 1

Работа с внешней длл.

Posted: 08.11.2013 19:05
by drabadan
Кто нибудь может написать гайд по использованию. В форме - "берем собираем библиотечку с исходным кодом Хеллоу ворлд, потом зовем из скрипта вот так".

Очень было бы интересно, а то в скриптах есть, а разобраться сложно!

Re: Работа с внешней длл.

Posted: 09.11.2013 4:18
by Vizit0r

Re: Работа с внешней длл.

Posted: 10.11.2013 14:51
by drabadan
не получается у меня подключить дллку... руки крюки - моска нет...

Delphi код моей библиотеки:

Code: Select all

library helloworld;

uses
  System.SysUtils,
  Vcl.Dialogs,
  System.Classes,
  stealth_script in '..\..\stealth_script.pas';

{$R *.res}

procedure OuterCall;//(str : String);
begin
  //ShowMessage('Hello World');
  Script.AddToSystemJournal('Hello world!');
end;


begin
//OuterCall;

end.
в скрипте:

Code: Select all

Program New;

procedure TestDll; external 'OuterCall@d:\helloworld.dll stdcall';

begin
 //Body of Script
 TestDll;
end.
что я делаю не так??

Re: Работа с внешней длл.

Posted: 10.11.2013 15:44
by nah nah
я хз делфи, но разве там не должно быть списка экспортируемых функций? в коде самой библиотеки?

edit кажется export

Re: Работа с внешней длл.

Posted: 10.11.2013 16:22
by Vizit0r
drabadan wrote:
не получается у меня подключить дллку... руки крюки - моска нет...

Delphi код моей библиотеки:

Code: Select all

library helloworld;

uses
  System.SysUtils,
  Vcl.Dialogs,
  System.Classes,
  stealth_script in '..\..\stealth_script.pas';

{$R *.res}

procedure OuterCall;//(str : String);
begin
  //ShowMessage('Hello World');
  Script.AddToSystemJournal('Hello world!');
end;


begin
//OuterCall;

end.
в скрипте:

Code: Select all

Program New;

procedure TestDll; external 'OuterCall@d:\helloworld.dll stdcall';

begin
 //Body of Script
 TestDll;
end.
что я делаю не так??

Code: Select all

....
exports
OuterCall;

begin
//OuterCall;

end.
ты бы сначала пробовал из дельфийской программы вызвать эту длл функцию, а потом уже из стелса.

и кстати, stdcall надо указать. А то ты в скрипте тип вызова ставишь как stdcall, а в длл это не прописываешь.

procedure OuterCall;stdcall;

дальше. String в параметрах использовать - совсем плохая идея. PChar - самое оно.
Гугл много еще чего интересного расскажет, например по словам "Dll на Delphi" "String в Delphi Dll" и т.д.

Re: Работа с внешней длл.

Posted: 10.11.2013 16:48
by drabadan
Vizit0r wrote: Гугл много еще чего интересного расскажет, например по словам "Dll на Delphi" "String в Delphi Dll" и т.д.
не всегда знаешь о чем гугл спрашивать... Чаще всего когда хочешь узнать как коробок спичек донести из А в B гугл дает ответ про космолеты которые бороздят просторы вселенных, где никаких коробков уже 3 тысячи лет никто не встречал...

Code: Select all

//Delphi code:

procedure OuterCall; stdcall;
begin
  //ShowMessage('Hello World');
  Script.AddToSystemJournal('Hello world!');
end;

exports
OuterCall;

Code: Select all

//Stealth code:

Program New;

procedure TestDll; external 'OuterCall@d:\helloworld.dll stdcall';

begin 
 TestDll;
end.
Все равно не работает... :(

Re: Работа с внешней длл.

Posted: 10.11.2013 18:07
by Vizit0r
Vizit0r wrote: ты бы сначала пробовал из дельфийской программы вызвать эту длл функцию, а потом уже из стелса.
не всегда знаешь о чем гугл спрашивать... Чаще всего когда хочешь узнать как коробок спичек донести из А в B гугл дает ответ про космолеты которые бороздят просторы вселенных, где никаких коробков уже 3 тысячи лет никто не встречал...
погугли "как правильно гуглить" :)

Re: Работа с внешней длл.

Posted: 10.11.2013 19:25
by Vizit0r

Code: Select all

Program New;
procedure TestDll(Msg : PChar); external 'OuterCall@d:\Stealth\my\Project7.dll stdcall';

begin
 TestDll(('1111'));
end.     

Code: Select all

library Project7;

uses
  System.SysUtils,
  VCL.Dialogs,
  System.Classes;

procedure OuterCall(Msg : PAnsiChar); stdcall;
begin
  ShowMessage(Msg);
end;

exports
OuterCall;

begin
end.