Sign in to follow this  
Followers 0

Работа с DLL


7 posts in this topic

Posted

Создание: C помощью самого Delphi: File -> New -> ... DLL

Общая структура DLL выглядит так:

library MyDll;

{ используемые модули }
uses SysUtils, Classes;

{ объявления и описания функций }
function get_near_merchant(): TNpc; export;  // Возвращает ближайшего торговца
var i: integer; dist: single;
begin
  result:= nil; dist:= 99;
  for i:= 0 to npcs.count-1 do begin
    if (user.distto(npcs(i)) < dist) and (npcs(i).IsMerchant) then begin
      result:= npcs(i);
      dist:= user.distto(npcs(i));
    end;
  end;
end; 

{ экспортируемые функции }
exports get_near_merchant();

begin
// инициализационная часть
end.

Теперь используем нашу функцию, описанную в только что созданной библиотеке:

uses SysUtils, Classes;
var
  function get_near_merchant(): TNpc; external 'MyDll.dll';

begin
  print(get_near_merchant().name +'('+ ftostr(user.distto(get_near_merchant()))+' m)',0);
end;

Сама dll'ка должна находиться при этом рядом со скриптом

Share this post


Link to post
Share on other sites

Posted

Вызов Dll'ки, написанной на C в VisualStudio из скрипта:

 

Код Dll: 

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int Add(int a, int  {
  return a + b;
}
Скомпилированную Dll надо положить в корень адреналина рядом с Adrenalin.exe, а не рядом со скриптом (если скрипты у вас в другой папке).

 

Код скрипта:

function Add(a: integer; b: integer): integer; cdecl; external 'DllTest2.dll';

begin
  print('2 + 2');  
  print(Add(2, 2));
end.

Результат:

drHujBq.png

Share this post


Link to post
Share on other sites

Posted

Только адреналин не отпускает загруженную dll после завершения скрипта, пока не закрыть сам АЛ. Можно что-нибудь сделать?

Share this post


Link to post
Share on other sites

Posted

Подскажите нубу - этими  dll можно функции скрипта шифровать в аси под аа?

Share this post


Link to post
Share on other sites

Posted

Подскажите нубу - этими  dll можно функции скрипта шифровать в аси под аа?

Можно вынести всю логику или ключевые моменты в библиотеку, а там уже шифровать как умеешь.

Share this post


Link to post
Share on other sites

Posted

 

Подскажите нубу - этими  dll можно функции скрипта шифровать в аси под аа?

Можно вынести всю логику или ключевые моменты в библиотеку, а там уже шифровать как умеешь.

 

т.е. они сами не как не шифруются? Я то не как не умею. А вот функции хотелось бы по прятать

Share this post


Link to post
Share on other sites

Posted (edited)

Создание: C помощью самого Delphi: File -> New -> ... DLL

Общая структура DLL выглядит так:

 

library MyDll;

{ используемые модули }
uses SysUtils, Classes;

{ объявления и описания функций }
function get_near_merchant(): TNpc; export;  // Возвращает ближайшего торговца
var i: integer; dist: single;
begin
  result:= nil; dist:= 99;
  for i:= 0 to npcs.count-1 do begin
    if (user.distto(npcs(i)) < dist) and (npcs(i).IsMerchant) then begin
      result:= npcs(i);
      dist:= user.distto(npcs(i));
    end;
  end;
end; 

{ экспортируемые функции }
exports get_near_merchant();

begin
// инициализационная часть
end.

 

при попытке создать дллку компилятор ругается на неизвестные типы переменных

[Pascal Error] Project1.dpr(20): E2003 Undeclared identifier: 'TNpc'
[Pascal Error] Project1.dpr(24): E2003 Undeclared identifier: 'npcs'
[Pascal Error] Project1.dpr(25): E2003 Undeclared identifier: 'user'
как сделать чтобы борланд их знал?

 

Edited by Nikas

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0