AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DLL Problem bei IntToStr und Uppercase
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Problem bei IntToStr und Uppercase

Ein Thema von Jackie1983 · begonnen am 27. Jan 2009 · letzter Beitrag vom 28. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 13:08
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 = 'uppercasethen Value := Uppercase(Args.Values[0]);

  //Konsole
  if Identifier = 'konsolethen 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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 13:12
Hi,

DLL und Strings aus Funktionen oder Proceduren zu ex oder importieren klappt nicht so einfach.
Verwende PChar(s) oder array [0..X] of chars.
Weitere Infos findest du dazu hier in der DP.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.631 Beiträge
 
Delphi 12 Athens
 
#3

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 13:15
Das kommt davon, wenn man den automatisch in den DLL-Source eingefügten Kommentar nicht liest.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 13:26
Sehr geehrter Herr DeddyH,
sie meinen bzw. beziehen sich auf Zitat:

Zitat:
Hinweis zur DLL-Speicherverwaltung: ShareMem muß sich in der
ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden ...
So oder Ähnlich.

Meiner vergisst das gern, da er es sich, auf meine Person bezogen, leistet DLL als nonVCL zu verfassen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.631 Beiträge
 
Delphi 12 Athens
 
#5

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 13:32
Ich weiß jetzt zwar nicht, was eine DLL mit NonVCL zu tun hat, aber wenn man auf solche Annehmlichkeiten wie ein automatisch erstelltes Codegerüst (inkl. des Kommentars *g*) verzichten will, bitte
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#6

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 14:09
lol habe es gesehen.
Habe jetzt aus dem String ein PChar gemacht.
jetzt funktioniert es.

Bekommen nur beim beenden der Anwendung ein EInvalidPointer, da muss ich nochmal schauen...

thx
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 14:14
Aus String einfach Pchar machen, geht auch nicht (immer). Was hast du genau gemacht?

Edit: Welches Codegerüst und welche VCL gibt es denn in einer DLL? Nicht einmal die DLLMain wird vorbereitet.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#8

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 14:16
Delphi-Quellcode:
Procedure ScriptData(st : TScriptThread; Identifier: String; var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean); stdcall;
var
  lCommands : TStringlist;
begin
//...


Procedure ScriptData(st : TScriptThread; pIdentifier: PChar; var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean); stdcall;
var
  lCommands : TStringlist;
  Identifier : string;
begin
  Identifier := String(pIdentifier);
//...
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#9

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 14:19
das ist jetzt meine ganze dll

Delphi-Quellcode:
library Script;

uses
  ShareMem ,SysUtils,
  Classes, JvInterpreter, Tools_Scripte;

Procedure ScriptData(st : TScriptThread; pIdentifier: PChar; var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean); stdcall;
var
  lCommands : TStringlist;
  Identifier : string;
begin
  Identifier := String(pIdentifier);
  //...
  Identifier := lowercase(Identifier);
  lCommands.Text := lowercase(lCommands.Text);
  done := not( lCommands.IndexOf(Identifier) = -1);

  if Identifier = 'sleepthen sleep(Args.values[0]);
  if Identifier = 'strtointthen value := StrToInt(Args.values[0]);
  if Identifier = 'uppercasethen Value := Uppercase(Args.Values[0]);
  if Identifier = 'konsolethen st.OutKonsoleP(Args.Values[0]);
end;

exports
  ScriptData;

begin
end.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: DLL Problem bei IntToStr und Uppercase

  Alt 27. Jan 2009, 14:28
Zitat von Jackie1983:
das ist jetzt meine ganze dll
Und?
Michael
Ein Teil meines Codes würde euch verunsichern.
  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:15 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 by Thomas Breitkreuz