AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Code LUA fähig machen???

Ein Thema von GoSk4te · begonnen am 31. Okt 2007 · letzter Beitrag vom 2. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
GoSk4te

Registriert seit: 31. Okt 2007
5 Beiträge
 
Delphi 5 Standard
 
#1

DLL Code LUA fähig machen???

  Alt 31. Okt 2007, 22:14
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
Dominic
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 31. Okt 2007, 23:08
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 31. Okt 2007, 23:50
Außerdem wäre die Angabe der Fehlermeldung hilfreich
Markus Kinzler
  Mit Zitat antworten Zitat
GoSk4te

Registriert seit: 31. Okt 2007
5 Beiträge
 
Delphi 5 Standard
 
#4

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

  Alt 1. Nov 2007, 09:13
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.
Dominic
  Mit Zitat antworten Zitat
1. Nov 2007, 09:35
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 1. Nov 2007, 09:44
Hallo,

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


Heiko
Heiko
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 1. Nov 2007, 09:53
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...
  Mit Zitat antworten Zitat
GoSk4te

Registriert seit: 31. Okt 2007
5 Beiträge
 
Delphi 5 Standard
 
#8

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

  Alt 1. Nov 2007, 10:01
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
Dominic
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 1. Nov 2007, 10:07
Wie ist den die Signatur von lua_pushcfunction?
Markus Kinzler
  Mit Zitat antworten Zitat
GoSk4te

Registriert seit: 31. Okt 2007
5 Beiträge
 
Delphi 5 Standard
 
#10

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

  Alt 1. Nov 2007, 10:23
sry, aber ich kenn mich mit lua so gut wie kaum aus.
Dominic
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.
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