Entwickler-Ecke

Sonstiges (Delphi) - Übergabe von 2 Pchar Werten an eine DLL Funktion


Bronstein - Di 20.11.07 11:54
Titel: Übergabe von 2 Pchar Werten an eine DLL Funktion
Hallo,
ich habe ein Problem, habe eine Funktion in einer DLL die zwei Pchar-Werte erwartet. Leider wird mir in der DLL ausgabe immer nur der LineName ausgegegben der SetupName ist leer, obwohl ich in meiner Anwendung wo ich diese Funktion aufrufe, beide Werte Zeichen enthalten.

Hier der Code meiner DLL:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure FehlerProtokoll(Meldung: ShortString);
//Mit dieser Funktion werden die Fehler protokolliert die beim Ausführen des Programms aufgetreten sind
var
  t_Datei: TextFile;
begin
  if Fileexists('log.txt'then
    AssignFile(t_Datei, 'log.txt')
  else
  begin
    AssignFile(t_Datei, 'log.txt');
    Rewrite(t_Datei);
  end;
  ReSet(t_datei);
  Append(t_Datei);
  WriteLn(t_Datei, DateTimeToStr(now) + ';' + GetRechnerName() + ';' + Meldung);
  CloseFile(t_Datei);
end;

function GetSetup(SetupName, LineName: Pchar): Pchar;
begin
  Protokoll_Log(LineName + '____' + SetupName);
end;

Den Aufruf der Funktion mache ich folgendermaßen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
[...]
  function GetSetup(LineName, SetupName: Pchar): Pchar  ; stdcall;
  external 'Check.dll';
[...]
Var
  Line, Programme: WideString;
Begin
  Linie := 'Linie 1';
  Programm := '123456789';
  tmpStr := GetSetup(pchar(string(Linie)), pchar(string(Programme)));
end;

Es steht in der Logdatei immer nur der Liniename.

Woran kann das liegen, bzw. was mache ich falsch?


Moderiert von user profile iconjasocul: Topic aus VCL (Visual Component Library) verschoben am Di 20.11.2007 um 11:00


Lossy eX - Di 20.11.07 13:25

Ich vermute mal stark, dass Line und Programm als WideString einen Grund haben ansonsten ist das was du da tust etwas überflüssig.

Aber du hast in der Anwendung ein STDCALL angeggeben aber in der DLL gar nichts. Das muss natürlich immer gleich sein.

Ansonten sehe ich so im Code keine weiteren Probleme. Evtl ist das pchar(string(Linie)) nicht ganz so glücklich. Da würde ich es evtl erst auf einen String zuweisen, denn nicht, dass der Kompiler mal auf die Idee es nur zu casten und nicht umzuwandeln.


gispos - Di 20.11.07 15:54

Poste mal den richtigen Code, der vorhandene kann so ja nicht funktionieren!
Programm > Programme?
GetSetup kann ja kein Result liefern!
Und ja, auch in der DLL ein Stdcall an die Function hängen.

Gruß gispos