Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Di 20.11.07 11:54 
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:

ausblenden 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:
ausblenden 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

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: 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.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
gispos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: 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