Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Header in Delphi übersetzen (https://www.delphipraxis.net/167681-c-header-delphi-uebersetzen.html)

Strally 12. Apr 2012 13:35


C++ Header in Delphi übersetzen
 
Hallo,

ich habe ein "kleines" Problem beim aufruf einer DLL - es kommt zu einer Zugriffsverletzung.

Der C-Header ist folgendermaßen deklariert:

Code:
DECLARE_HANDLE(HdMWMONRMXMLIMP);     // Handle fuer Import

extern BOOL DLLEXP MwmOnrmXmlImpInit(HdMWMONRMXMLIMP* phOnrm, wchar_t* pszLicenseId,
                                     MwmOnrmXmlError* pErrorInfo);

extern BOOL DLLEXP MwmOnrmXmlImpOpen(HdMWMONRMXMLIMP hOnrm, wchar_t* pszFile);
ich habe das folgendermaßen ih Pascal übersetzt


Delphi-Quellcode:
type
  fPHandle = ^THandle;

 MwmOnrmXmlImpInit: function(phOnrm: fPHandle; pszLicenseId : PWideChar;
                              var pErrorInfo: tagMwmOnrmXmlError): Bool cdecl {$IFDEF WIN32} stdcall {$ENDIF};

 MwmOnrmXmlImpOpen: function(hOnrm: THandle;
                             var pszFile: PWideChar): Bool cdecl;  {$IFDEF WIN32} stdcall {$ENDIF};
aufrufen im Code tue ich es folgendermaßen

Delphi-Quellcode:
var
  pHandle : THandle;
  sFile : String;
  s : PWideChar;
begin
  sFIle := 'Pfad der Datei';
  if MwmOnrmXmlImpInit((@pHandle),'0',pError) then //<-- dieser Aufruf funktioniert
  begin
     s := PWideChar(WideString(sFile));
     if MwmOnrmXmlImpOpen(pHandle,s) then //Hier kommt eine Zugriffsverletzung
  end;
end;
laut dem Entwickler der DLL kommt s nur als Hieroglyphen an - aber warum ist das so ?
Was mache ich falsch ???

Ich bedanke mich bereits jetzt für Anregungen und Vorschläge!

Mfg
Strally

Bummi 12. Apr 2012 13:56

AW: C++ Header in Delphi übersetzen
 
so ist es wahrscheinlich auch nicht besser?
Delphi-Quellcode:
var
  pHandle : THandle;
  sFile : WideString;
  s : PWideChar;
begin
  sFIle := 'Pfad der Datei';
  if MwmOnrmXmlImpInit((@pHandle),'0',pError) then //<-- dieser Aufruf funktioniert
  begin
     s := @sFile[1];
     if MwmOnrmXmlImpOpen(pHandle,s) then //Hier kommt eine Zugriffsverletzung
  end;
end;

DeddyH 12. Apr 2012 13:57

AW: C++ Header in Delphi übersetzen
 
Bist Du Dir sicher, dass der PWideChar-Parameter ein Variablenparameter ist? Und Dein Konstrukt mit den Aufrufkonventionen verstehe ich auch nicht ganz, müsste das nicht immer cdecl sein? Allerdings kenne ich mich mit C/C++ zu wenig aus, um gesicherte Antworten zu geben.

Strally 12. Apr 2012 13:59

AW: C++ Header in Delphi übersetzen
 
Danke für den Hinweis - habe es getestet leider bleibt
das Ergebnis das gleiche.

Mfg
Strally

Strally 12. Apr 2012 14:01

AW: C++ Header in Delphi übersetzen
 
@DeddyH:

Tja das ist das Problem ich bin auch net ganz sattelfest in C :?
Habe das .h File von einem Autokonverter übersetzen lassen - allerdings ist er bei
wchar_t* ausgestiegen und ich das als PWideChar deklariert.
Aber ich werde mal deinen Vorschlag testen - Danke.

Mfg
Strally

DeddyH 12. Apr 2012 14:06

AW: C++ Header in Delphi übersetzen
 
Wie schon gesagt, ohne jede Gewähr:
Delphi-Quellcode:
type
  fPHandle = ^THandle;

 MwmOnrmXmlImpInit: function(phOnrm: fPHandle; pszLicenseId : PWideChar;
                              var pErrorInfo: tagMwmOnrmXmlError): Bool; cdecl;

 MwmOnrmXmlImpOpen: function(hOnrm: THandle;
                             pszFile: PWideChar): Bool; cdecl;

Strally 12. Apr 2012 14:08

AW: C++ Header in Delphi übersetzen
 
Also ich muss schon sagen ihr seid toll !!!

Der Tipp von TeddyH scheint zu fruchten - konnte die Routine jetzt ohne Zugriffsverletzung starten :thumb:

Vielen Dank nochmal - falls es weitere Probleme geben sollte melde ich mich nochmals.

Schönen Nachmittag noch.

Mfg
Strally

DeddyH 12. Apr 2012 14:13

AW: C++ Header in Delphi übersetzen
 
Ich wäre Dir sehr verbunden, wenn Du meinen Nick richtig schreiben würdest :mrgreen:

Bummi 12. Apr 2012 14:14

AW: C++ Header in Delphi übersetzen
 
:tongue:
Zitat:

TeddyH

Strally 12. Apr 2012 14:24

AW: C++ Header in Delphi übersetzen
 
Sorry :oops:
kommt nicht wieder vor!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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