AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Klasse von C nach Pascal übersetzen?
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse von C nach Pascal übersetzen?

Ein Thema von Dani · begonnen am 25. Mai 2003 · letzter Beitrag vom 26. Mai 2003
Antwort Antwort
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Klasse von C nach Pascal übersetzen?

  Alt 25. Mai 2003, 23:36
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?
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 25. Mai 2003, 23:40
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 25. Mai 2003, 23:42
Zitat von Chewie:
das ->-Zeichen enstpricht dem ., nur dass es bei Zeigern anstelle des Punktes verwendet werden muss.
Okay, muss ich das auch in Delphi oder kann ich wie gehabt den Punkt verwenden?

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
{...}
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 25. Mai 2003, 23:44
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;
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 26. Mai 2003, 00:00
Besten Dank schonmal!

Beim compilieren von dem hier, kommt aber leider noch der Fehler "Operator oder Semikolon fehlt":

Delphi-Quellcode:
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.
Und zwar in der Zeile "pViseEntryData := PViseEntryData(dwReserved);"
Hab ich da was falsch eingetragen?!
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6
  Alt 26. Mai 2003, 07:10
Zitat von Dani:
Und zwar in der Zeile "pViseEntryData := PViseEntryData(dwReserved);"
Hab ich da was falsch eingetragen?!
Da habe ich das Zeichen "C" in PCViseEntryData vergessen.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 26. Mai 2003, 13:15
Super, jetzt passts!
Tausend Dank nochmal für die Mühe!!!
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:00 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