![]() |
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:
ich habe das folgendermaßen ih Pascal übersetzt
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);
Delphi-Quellcode:
aufrufen im Code tue ich es folgendermaßen
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};
Delphi-Quellcode:
laut dem Entwickler der DLL kommt s nur als Hieroglyphen an - aber warum ist das so ?
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; Was mache ich falsch ??? Ich bedanke mich bereits jetzt für Anregungen und Vorschläge! Mfg Strally |
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; |
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.
|
AW: C++ Header in Delphi übersetzen
Danke für den Hinweis - habe es getestet leider bleibt
das Ergebnis das gleiche. Mfg Strally |
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 |
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; |
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 |
AW: C++ Header in Delphi übersetzen
Ich wäre Dir sehr verbunden, wenn Du meinen Nick richtig schreiben würdest :mrgreen:
|
AW: C++ Header in Delphi übersetzen
:tongue:
Zitat:
|
AW: C++ Header in Delphi übersetzen
Sorry :oops:
kommt nicht wieder vor! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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