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.