Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   DLL Code LUA fähig machen??? (https://www.delphipraxis.net/102606-dll-code-lua-faehig-machen.html)

GoSk4te 31. Okt 2007 21:14


DLL Code LUA fähig machen???
 
Hallo...

Also zu meiner Frage.... Ich hab ne Art Mini-Netzwerk DLL in Delphi geschrieben, um über LUA Skripte darauf zuzugreifen zu können... Die Prozeduren auch schön nochmal im exports teil aufgelistet, aber wenn ich per lua versuche prozeduren aufzurufen, kommt Error... Ja, das wird daran liegen das der DLL Code erst LUA fähig gemacht werden muss, oder??? Bitte erklärt mir das einer :wink:

dizzy 31. Okt 2007 22:08

Re: DLL Code LUA fähig machen???
 
Da LUA primär für die Einbindung in C-Hosts konzipiert wurde, schätze ich, dass du alles Delphi-Spezifische umdeklarieren musst. Als aller erstes tippe ich drauf, dass die Aufrufkonvention STDCALL sein muss. Ferner dürften Delphi-Strings nicht klappen wenn du sowas irgendwo als Parameter hast. Das sollte in PChars geändert werden.
Einfach als 2 Schüsse ins blaue, hab die LUA Docs nicht mehr wirklich im Kopf grad :)

mkinzler 31. Okt 2007 22:50

Re: DLL Code LUA fähig machen???
 
Außerdem wäre die Angabe der Fehlermeldung hilfreich

GoSk4te 1. Nov 2007 08:13

Re: DLL Code LUA fähig machen???
 
zu aufrufkonvention: hab bereits stdcall verwendet... zu strings: ok, hab ich ausgetauscht.
Immer noch Fehlermeldung: "Lua Error". Mehr nicht. Hier der Code, vllt stimmt ja was net:
(Ist bis jetzt nur zum testen obs klappt...)

Code:
library Project1;


uses
    ShareMem,
  SysUtils,
  ScktComp,
  Classes;

{$R *.RES}

var
 clientSocket: TClientSocket;
 serverSocket: TServerSocket;

 procedure Connect(IP: PChar; Port: Integer); stdcall;
 begin
      clientSocket := TClientSocket.Create(clientSocket);
      clientSocket.Port := Port;
      clientSocket.Host := IP;
      clientSocket.Open;
 end;

 procedure Listen(Port: Integer); stdcall;
 begin
      serverSocket := TServerSocket.Create(serverSocket);
      serverSocket.Port := Port;
      serverSocket.Open;
 end;


 exports
 Connect,
 Listen;

begin
end.

DP-Maintenance 1. Nov 2007 08:35

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage

hoika 1. Nov 2007 08:44

Re: DLL Code LUA fähig machen???
 
Hallo,

das sharemem muss raus.
Ausserdem zeig doch mal die c-Deklaration.


Heiko

Basilikum 1. Nov 2007 08:53

Re: DLL Code LUA fähig machen???
 
das wird so einfach nicht gehen...
du must einen bestimmten Einsprungspunkt erstellen (luaopen_<name des Modules>), in dem du deine Funktionen in eine Lua-Tabelle verpackst, welche dann im Interpreter in den Namensraum aufgenommen wird.
Sämtlich Interaktion mit "Lua" erfolgt über die Lua-Stacks - sprich: du musst zuerst die notwendigen APIs von C nach Delphi übersetzten, damit du überhaupt den Stack bearbeiten kannst...
Alle aus Lua erreichbaren Funktionen müssen der erwarteten Signatur entsprechend - auch dort wieder nur per Lua-Stack agieren...

ich kenne das ganze nur von der C-Welt her (dort entfällt das Übersetzten), ich kann dir also keine Sourcen liefern...

GoSk4te 1. Nov 2007 09:01

Re: DLL Code LUA fähig machen???
 
hmmm... hab mich durch n paar lua tuts gestöbert und hab den code wiefolgt geändert(nur connect i verändert!)

Code:
library Project1;


uses

  SysUtils,
  ScktComp,
  Lua,
  Classes;

{$R *.RES}

var
 clientSocket: TClientSocket;
 serverSocket: TServerSocket;
 Lua_Instance:Lua_State;

 function Connect(L: Lua_State; IP: PChar; Port: Integer): integer; stdcall; cdecl;
 begin
      clientSocket := TClientSocket.Create(clientSocket);
      clientSocket.Port := Port;
      clientSocket.Host := IP;
      clientSocket.Open;
 end;

 procedure Listen(Port: Integer); stdcall;
 begin
      serverSocket := TServerSocket.Create(serverSocket);
      serverSocket.Port := Port;
      serverSocket.Open;
 end;


 exports
 Connect,
 Listen;

begin
  lua_pushcfunction( Lua_Instance, Connect);

  lua_setglobal( Lua_Instance, 'Connect' );
end.
So, jetzt kommt aber beim kompiliern n Fehler,
[Fehler] Project1.dpr(39): Inkompatible Typen: Liste der Parameter ist unterschiedlich
Bezieht sich auf das lua_pushfunction

mkinzler 1. Nov 2007 09:07

Re: DLL Code LUA fähig machen???
 
Wie ist den die Signatur von lua_pushcfunction?

GoSk4te 1. Nov 2007 09:23

Re: DLL Code LUA fähig machen???
 
sry, aber ich kenn mich mit lua so gut wie kaum aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz