![]() |
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: |
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 :) |
Re: DLL Code LUA fähig machen???
Außerdem wäre die Angabe der Fehlermeldung hilfreich
|
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
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage |
Re: DLL Code LUA fähig machen???
Hallo,
das sharemem muss raus. Ausserdem zeig doch mal die c-Deklaration. Heiko |
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... |
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:
So, jetzt kommt aber beim kompiliern n Fehler,
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. [Fehler] Project1.dpr(39): Inkompatible Typen: Liste der Parameter ist unterschiedlich Bezieht sich auf das lua_pushfunction |
Re: DLL Code LUA fähig machen???
Wie ist den die Signatur von lua_pushcfunction?
|
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:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz