Autor Beitrag
jackie05
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Sa 13.09.08 22:57 
Hallo,
ich habe folgendes problem und zwar, möchte ich meine Delphi DLL Datei in eine andere Programmiersprache einbinden, das ist kein problem für micht, aber ich muss als Rückgabetyp PChar benutzen statt string.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function HelloWorld(): pchar; stdcallexport;
begin 
  result := 'Hello World!';
end;


diese Funktion kann ich problemlos mit Blitz3D aufrufen, aber wenn ich funktionen schreibe und noch parameter übergebe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TestFunktion(MSG: string): pchar; stdcallexport;
begin
  result := 'Hallo, '+MSG;
end;


dann bekomme ich eine fehlermeldung, wenn ich diese funktion versuche aufzurufen mit Blitz3D.

woran könnte der fehler eigentlich liegen?

Wenn ich funktionen schreibe, ohne weitere Parameter, dann funktioniert alles.

Ich bedanke mich schonmal im Voraus.

MfG


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 14.09.2008 um 00:03
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Sa 13.09.08 23:05 
user profile iconjackie05 hat folgendes geschrieben:

...PChar benutzen statt string...


Du gibts die Antwort doch schon selbst^^
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: So 14.09.08 00:03 
Ja, ich meine wenn ich funktionen aufrufen möchte die noch weitere Parameter haben, dann geht das nicht.
Ich bekomme in Blitz3D folgende fehlermeldung:
Memory access violation

Irgendwas mache ich falsch in der DLL Datei mit der funktion.

wie könnte ich das problem lösen?

MfG
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: So 14.09.08 00:06 
Naja dein Parameter ist ja gerade eben ein string und kein PChar, das wird es dann doch wohl sein :-)

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: So 14.09.08 01:30 
Danke Dir.

Ich könnte das auch so machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TestFunktion(MSG: string): pchar; stdcallexport;  
begin  
  result := PChar('Hallo, '+MSG);  
end;


Ich muss diesen Parameter als String definieren, da ich in meine anderen Funktion Stringverarbeitung mache und PChar ist da wohl schlecht dafür geeignet.

Irgendwie funktioniert das nicht, naja, ich werde es mal irgendwie versuchen.

MfG
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 14.09.08 02:56 
Du kannst problemlos einen PChar nach String casten und umgekehrt. Allerdings wirst du noch ein paar Probleme bekommen. Wie es richtig geht kannst du hier nachlesen: www.michael-puff.de/Artikel -> StringDLL.shtml