![]() |
Stringübergabe an C# DLL funzt nicht
Hallo,
ich habe ein Problem mit der Stringübergabe von Delphi (XE4) an eine C# DLL. Über die DLL habe ich die Info, dass die Funktion so definiert sein soll: int __stdcall spssOpenRead( const char* fileName, int* hFile); Ich habe die DLL ordnungsgemäß eingebunden: Function spssOpenRead(fileName:pchar;hFile:Integer):Integer ;stdcall; external 'spssio32.dll' name 'spssOpenRead'; Mein Problem ist, dass ich es nicht schaffe der DLL den „Filename“ zu übergeben. Mein Aufruf sieht wie folgt aus: Procedure click; var iii,handle1:integer; mm1:pchar; begin handle1:=1; mm1:= 'ergaenz.sav'; iii:=spssOpenRead(mm1,handle1); showmessage(inttostr(iii)); end; Es führt immer zu einem Programmabbruch: Exception der Klasse $C000005 mit der Meldung: „access violation“… Da es in der DLL auch noch andere Funktionen gibt, die mit Integer-Werten arbeiten, habe ich diese Funktionen mal getestet und bekomme vernünftige Werte zurückgeliefert, so dass der Fehler „nur“ in der String-Übergabe zu suchen ist. Ich habe doch Pointer-Variablen für die Übergabe verwendet, kann mir jemand helfen? |
AW: Stringübergabe an C# DLL funzt nicht
Hi,
versuch mal das hier:
Delphi-Quellcode:
Procedure click;
var iii,handle1:integer; mm1:String; //hier begin handle1 := 1; mm1 := 'ergaenz.sav'; iii := spssOpenRead(PChar(mm1),handle1); //hier auch noch showmessage(inttostr(iii)); end; |
AW: Stringübergabe an C# DLL funzt nicht
Danke für den Tipp, Lemmy, aber es gibt leider dieselbe Fehermeldung.
|
AW: Stringübergabe an C# DLL funzt nicht
Bei meinen Versuchen hatte ich auch schon mit string gearbeitet und ein testweise "#0" angehängt. Leider auch ohne Erfolg.
|
AW: Stringübergabe an C# DLL funzt nicht
Probier mal mit Ansi-String zu arbeiten. Bei C#/.NET kann man angeben welche Codierung (unicode/ansi) eine Funktion hat. Evtl. hat diese ja eine Ansi-Signatur.
|
AW: Stringübergabe an C# DLL funzt nicht
Und absolute Pfade sind wahrscheinlich auch sinnvoller.
|
AW: Stringübergabe an C# DLL funzt nicht
Leider auch nicht.
|
AW: Stringübergabe an C# DLL funzt nicht
Die Aufrufkonvention ist wirklich stdcall, oder könnte es auch z.B. cdecl sein?
|
AW: Stringübergabe an C# DLL funzt nicht
hab ich auch schon probiert, obwohl es in der Beschreibung "stdcall" heisst.
Ich teste es aber mal mit den neuen Vorschlägen (string/ansistring) |
AW: Stringübergabe an C# DLL funzt nicht
@deddyH: Ich habs nur für das Forum abgekürzt. Da steht der komplette Pfad drin und wenn der falsch ist, sollte eine korrekte Fehlermeldung im Parameter "iii" stehen.
Aber soweit kommt es leider gar nicht: access violaton at ... writing at ... Der "Zeiger" kommt nicht richtig in der DLL an. Es ist immer dieselbe Adresse! Übrigens: "cdecl" hat auch nicht gefunzt. Die andere Funktion aus der DLL, die ich getestet habe konnte ich auch über "stcall" aufrufen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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-2025 by Thomas Breitkreuz