![]() |
Klasse von C nach Pascal übersetzen?
Hallo Leute,
Ich versuche gerade, folgende Klasse inkl. Zugriff auf diese nach Delhpi zu übersetzen, habs aber bisher nicht geschafft: If you need access to information returned by calling the external code, your code source must also include the following class definition: class CViseEntryData { public: HWND m_hwndMain; // Main window handle HWND m_hwndProgress; // Progress dialog window handle BOOL m_bUninstall; // Uninstaller flag LPCSTR m_lpszUninstallLogFile; // Uninstall log file path LPCSTR m_lpszTempDir; // Installer VISE’s temp directory path HINSTANCE m_hinst; // Instance handle of the VISE dll char m_szInstallerName[_MAX_PATH]; // Name of the installer }; und hierran scheiterts: In order to correctly format the information defined in the CViseEntryData class, your external code must include the following line: CViseEntryData* pViseEntryData = (CViseEntryData*)dwReserved; You may then access the CViseEntryData class information in your external code using the following convention: pViseEntryData->m_lpszTempDir; -------------------------------------------------------- Was bedeuten diese Ausdrücke?? CViseEntryData* pViseEntryData = (CViseEntryData*)dwReserved; und pViseEntryData->m_lpszTempDir; Kein Wort über eine zu erstellende pViseEntryData Variable im Text, und was "->" im C-Syntax bedeutet weiss ich leider auch net :( Kann mir da jemand helfen? :wink: |
pViseEntryData ist nur ein Zeiger auf eine Instanz von CViseEntryData, und das ->-Zeichen enstpricht dem ., nur dass es bei Zeigern anstelle des Punktes verwendet werden muss.
|
Zitat:
Ich hätte vielleicht dazusagen sollen, dass es darum geht, in einer von einem Installer aufgerufenen DLL, auf bestimmte Informationen wie den Window-Handle des Installers zuzugreifen. Ich schätze mal, dass "CViseEntryData* pViseEntryData = (CViseEntryData*)dwReserved;" dafür verantwortlich ist, die Variable mit den Informationen zu füllen? "dwReserved" ist eine Variable, die der exportierten Funktion der aufgerufenen DLL übergeben wird. Leider hab ich noch nicht richtig kapiert, was nun richtig ist...
Delphi-Quellcode:
var pViseEntryData: ^CViseEntryData;
{oder} var InstInfo: CViseEntryData; ^InstInft.MainWindowHandle {oder} var pViseEntryData: CViseEntryData; pViseEntryData:= CViseEntryData.create; pViseEntryData.MainWindowHandle {...} |
1. Mit welchem Compiler wurde die Klasse kompiliert? Bei Borland Compiler ist der aufwand geringer.
2. Wer deklariert eine reine Datenstruktor (Record) als Klasse? Ich sehe keine einzige Methode in der Klasse, die die Verwendung von Class rechtfertigen würde. Eine struct hätte es auch getan. 3. "->" bedeutet "^." in Delphi und da Delphi automatisch die Zeiger dereferenziert, reicht ein "." 4. dwReserved woher kommt denn diese Variable? Irgendwoher muss die ja kommen. Ist das ein Parameter der Funktion?
Delphi-Quellcode:
var pViseEntryData: PCViseEntryData;
begin pViseEntryData := PViseEntryData(dwReserved); end;
Delphi-Quellcode:
PCViseEntryData = ^TCViseEntryData;
TCViseEntryData = object m_hwndMain: HWND; // Main window handle m_hwndProgress: HWND; // Progress dialog window handle m_bUninstall: BOOL; // Uninstaller flag m_lpszUninstallLogFile: PChar; // Uninstall log file path m_lpszTempDir: PChar; // Installer VISE’s temp directory path m_hinst: THandle; // Instance handle of the VISE dll m_szInstallerName: array[0.._MAX_PATH - 1] of Char; // Name of the installer end; |
Besten Dank schonmal!
Beim compilieren von dem hier, kommt aber leider noch der Fehler "Operator oder Semikolon fehlt":
Delphi-Quellcode:
Und zwar in der Zeile "pViseEntryData := PViseEntryData(dwReserved);"
library ViseEntryData;
uses SysUtils, Windows, Dialogs; {$E DLL} {R *.res} type PCViseEntryData = ^TCViseEntryData; TCViseEntryData = object m_hwndMain: HWND; // Main window handle m_hwndProgress: HWND; // Progress dialog window handle m_bUninstall: BOOL; // Uninstaller flag m_lpszUninstallLogFile: PChar; // Uninstall log file path m_lpszTempDir: PChar; // Installer VISE’s temp directory path m_hinst: THandle; // Instance handle of the VISE dll m_szInstallerName: array[0..MAX_PATH - 1] of Char; // Name of the installer end; const nz=#13+#10; var pViseEntryData: PCViseEntryData; function ViseEntry(lParam1:LongInt; lpParam2:LPCSTR; dwReserved:DWORD):LongInt; stdcall; begin Result:=1; pViseEntryData := PViseEntryData(dwReserved); ShowMessage('Welcome to ' + pViseEntryData.m_szInstallerName + '.' + nz + 'The temporary directory is ' + pViseEntryData.m_lpszTempDir); end; exports ViseEntry; {$R *.RES} begin end. Hab ich da was falsch eingetragen?! |
Zitat:
|
Super, jetzt passts! :)
Tausend Dank nochmal für die Mühe!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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