servus,
habe mir eine kleine Testanwendung mit TJvInterpreterProgram gebaut.
Möchte die Procedure gerne in einer
DLL auslagern, so kann ich mein Script immer wieder updaten ohne das die Anwendung neu kompiliert werden muss. Allerdings kommt bei uppercase ein Fehler
Delphi-Quellcode:
Type
TScriptData =
procedure(st : TScriptThread; Identifier:
string;
var Value: Variant; Args: TJvInterpreterArgs;
var Done: Boolean);
stdcall;
// external 'Script.dll';
//...
procedure TScriptThread.Interpreter_GetValue(Sender: TObject;
Identifier:
string;
var Value: Variant; Args: TJvInterpreterArgs;
var Done: Boolean);
var
Dll : THandle;
DllPath :
String;
DLLScriptData : TScriptData;
begin
DllPath := ExtractFilePath(ParamStr(0)) + '
script.dll';
DLL := LoadLibrary(PChar(DllPath));
try
DLLScriptData := GetProcAddress(
DLL, '
ScriptData');
if Assigned(DLLScriptData)
then
DLLScriptData(self, Identifier, Value, Args, Done);
except
fErrorStr := '
Fehler beim Befehl <'+sIdentifier+'
>';
if Assigned(fonError)
then
fonError(fErrorStr, self);
end;
FreeLibrary(
DLL);
end;
//<- wenn uppercase in Identifier steht kommt hier der fehler
Meine
DLL
Delphi-Quellcode:
library Script;
uses
SysUtils,
Classes, JvInterpreter, Tools_Scripte;
Procedure ScriptData(st : TScriptThread; Identifier: string; var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean); stdcall;
begin
///...
Identifier := lowercase(Identifier);
lCommands.Text := lowercase(lCommands.Text);
done := not( lCommands.IndexOf(Identifier) = -1);
if Identifier = 'uppercase' then Value := Uppercase(Args.Values[0]);
//Konsole
if Identifier = 'konsole' then st.OutKonsoleP(Args.Values[0]);
end;
exports
ScriptData;
begin
end.
Der Befehl Konsole funktioniert. Nur bei uppercase kommt eine Fehlermeldung.
Kann mir da einer weiterhelfen? Habe bestimmt irgend wo einen Fehler gemacht.
mfg