Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

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

тут можно задать вопрос по скриптингу
Post Reply
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

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

Post by drabadan »

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

Очень было бы интересно, а то в скриптах есть, а разобраться сложно!
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

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

Post 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.
что я делаю не так??
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

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

Post by nah nah »

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

edit кажется export
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post 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" и т.д.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

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

Post 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.
Все равно не работает... :(
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

Vizit0r wrote: ты бы сначала пробовал из дельфийской программы вызвать эту длл функцию, а потом уже из стелса.
не всегда знаешь о чем гугл спрашивать... Чаще всего когда хочешь узнать как коробок спичек донести из А в B гугл дает ответ про космолеты которые бороздят просторы вселенных, где никаких коробков уже 3 тысячи лет никто не встречал...
погугли "как правильно гуглить" :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post 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.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply