AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Stringübergabe an C# DLL funzt nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Stringübergabe an C# DLL funzt nicht

Ein Thema von Testsieger · begonnen am 25. Nov 2013 · letzter Beitrag vom 25. Nov 2013
Antwort Antwort
Seite 1 von 2  1 2      
Testsieger

Registriert seit: 23. Nov 2013
22 Beiträge
 
#1

Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:18
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?
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:33
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;
  Mit Zitat antworten Zitat
Testsieger

Registriert seit: 23. Nov 2013
22 Beiträge
 
#3

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:37
Danke für den Tipp, Lemmy, aber es gibt leider dieselbe Fehermeldung.
  Mit Zitat antworten Zitat
Testsieger

Registriert seit: 23. Nov 2013
22 Beiträge
 
#4

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:39
Bei meinen Versuchen hatte ich auch schon mit string gearbeitet und ein testweise "#0" angehängt. Leider auch ohne Erfolg.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:41
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:46
Und absolute Pfade sind wahrscheinlich auch sinnvoller.
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
Testsieger

Registriert seit: 23. Nov 2013
22 Beiträge
 
#7

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:47
Leider auch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:50
Die Aufrufkonvention ist wirklich stdcall, oder könnte es auch z.B. cdecl sein?
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
Testsieger

Registriert seit: 23. Nov 2013
22 Beiträge
 
#9

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:53
hab ich auch schon probiert, obwohl es in der Beschreibung "stdcall" heisst.
Ich teste es aber mal mit den neuen Vorschlägen (string/ansistring)
  Mit Zitat antworten Zitat
Testsieger

Registriert seit: 23. Nov 2013
22 Beiträge
 
#10

AW: Stringübergabe an C# DLL funzt nicht

  Alt 25. Nov 2013, 07:57
@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.
  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 06:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz