Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi LUA will die Funktion nicht ausführen. (https://www.delphipraxis.net/144432-lua-will-die-funktion-nicht-ausfuehren.html)

Berlinermauer 7. Dez 2009 21:10


LUA will die Funktion nicht ausführen.
 
Soo,
ich habe mir ein Tutorial dazu angesehen, fast alles genauso gemacht,
aber der Text erscheint nicht :[

Hier mal der Delphi Code:

Delphi-Quellcode:
unit scripting;

interface
uses LUA;

procedure InitScripts;
procedure CloseScripts;
procedure LoadScript(Scriptname: String);
procedure PublishFunctions;
// ### Here comes the Functions accessable from lua ###
function DisplayText(L: Lua_State):integer;cdecl;

Var
Lua_Instance: Lua_State;

implementation
uses
Unit1;

procedure InitScripts;
begin
  Lua_Instance := Lua_Open;
  LuaOpen_Base(Lua_Instance);
end;

procedure CloseScripts;
begin
  Lua_Close(Lua_Instance);
  Lua_Instance := nil;
end;

procedure LoadScript(Scriptname: String);
var
Sucess: Integer;
begin
  Sucess := Lua_DoFile(Lua_Instance, PChar(Scriptname));

  if Sucess = 2 then
    Form1.DisplayText(1,0,0,2,'The loading of the Script "' + Scriptname + '" failed!');
end;

procedure PublishFunctions;
begin
lua_pushcfunction( Lua_Instance, DisplayText);
lua_setglobal( Lua_Instance, 'DisplayText' );
end;

function DisplayText(L: Lua_State):integer;cdecl;
var
ArgCount: Integer;
Red,Blue,Green,Thickness : Single;
Text: String;
begin
  argCount := Lua_GetTop(L); // Anzahl Parameter

  if argCount = 5 then begin
     Red := Lua_ToNumber(L,1);
     Green := Lua_ToNumber(L,2);
     Blue := Lua_ToNumber(L,3);
     Thickness := Lua_ToNumber(L,4);
     Text := Lua_ToString(L,5);

     Form1.DisplayText(Red,Green,Blue,Thickness,Text);
  end;

  Lua_Pop(L, argCount);

  Result := 0;
end;

end.
Soo
Der Inhalt der LUA is lediglich
Code:
DisplayText(1,0,0,1,"Hello World");
Jedoch wird der Text nicht angezeigt.
Führ ich die DisplayText von Hand aus geht es.

Ich habe nur
Zitat:

LuaOpen_Base(Lua_Instance);
Mit dieser Anweisung wird nichts anderes gemacht als den Output des Lua Programms auf das Konsolenfenster zu Lenken und einige andere Dinge mit der Anwendung zu verknüpfen. Will man Lua in einem nicht Konsolen Basierendem Programm verwenden, so sollte man auf diese Zeile verzichten und die Funktion „print“ neu implementieren (Aber dazu nachher mehr…).
Weggelassen, da mir klar war das das print nicht funktioniert (es handelt sich um ein Spiel)

BUG 7. Dez 2009 21:30

Re: LUA will die Funktion nicht ausführen.
 
Sicher, dass das nicht so geht:
Delphi-Quellcode:
Red := Lua_ToNumber(L, -5);
Green := Lua_ToNumber(L, -4);
Blue := Lua_ToNumber(L, -3);
Thickness := Lua_ToNumber(L, -2);
Text := Lua_ToString(L, -1);
Bei allen Beispielen, die ich gefunden habe, gab es negative Parameter.

MfG,
Bug

Berlinermauer 8. Dez 2009 15:08

Re: LUA will die Funktion nicht ausführen.
 
Hallo, ich habe es nun gelöst :]

Und zwar,
Das mit dem negativen scheint nicht das Problem zu sein, denn egal ob negativ od. positiv es kommt das gleiche raus.

Ich hatte lediglich vergessen, die Funktion PublishFunctions aufzurufen, welche die Funktion dem Script übergibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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