![]() |
C++ -> Delphi
Moin,
ich weiss nicht wie es mit Themen ist bei denen es eigentlich ums gleiche geht, neuen Thread oder den alten benutzen egal ob essich um was anderes handelt? Ich möchte einen C++ Code in Delphi-Code umwandeln. Original Code:
Code:
void __stdcall (*LoadDll)(LOADINFO*);
typedef struct { DWORD mVersion; HWND mHwnd; BOOL mKeep; } LOADINFO; Ich habe es so versucht:
Delphi-Quellcode:
Leider gibts beim Aufruf eine AV, jemand ne Ahnung wie es richtig aussehen müsste? <g>
type
PLOADINFO = ^TLOADINFO; TLOADINFO = record mVersion: DWORD; mHwnd: HWND; mKeep: BOOL; end; TLoadDll = procedure(LoadInfo: PLOADINFO); stdcall; var LoadDll: TLoadDll; |
Re: C++ -> Delphi
Na der Variablen muss erst noch ein Wert zugewiesen werden.
Die source ist ein uebliches Konstrukt wenn man mit LoadLobrary() und GetProcAddress() eine DLL dynamisch laedt. |
Re: C++ -> Delphi
Moin Robert,
Wie meinst du das mit Wert zuweisen? <g> Welchen Wert? Wird im obigem C++-Code doch auch nicht gemacht oder? |
Re: C++ -> Delphi
Zitat:
Zeig mal den Code der die Struktur verwendet (C und Delphi). |
Re: C++ -> Delphi
Moin Nico,
der Code steckt in einer DLL die von einem anderen Programm aus (mIRC) aufgerufen wird. Ich quote dir mal den Teil der in der mIRC Hilfe steht: Zitat:
Übrigens habe ich den Methodenzeiger exportiert:
Delphi-Quellcode:
exports
LoadDll; |
Re: C++ -> Delphi
Zitat:
Zitat:
|
Re: C++ -> Delphi
Nunja, Nico, von ausserhalb wird ja die Prozedur "LoadDll", bzw ein Pointer auf diese aufgerufen, wie hätte ich das sonst lösen sollen? LoadDll ist ja der Zeiger auf die Prozedur, oder? :oops:
|
Re: C++ -> Delphi
void __stdcall (*LoadDll)(LOADINFO*);
ist die Deklaration einer Zeigervariablen genau wie var LoadDll: TLoadDll; Globale Variablen werden aber mit NULL/nil initialisiert. Irgendwo im Code muss also der Funktionsvariablen ein Wert zugewiesen werden, damit man die Funktion aufrufen kann. Dasmacht man mit LoadLibrary() und GetProcAddress() um die adresse der Funktion aus der DLL zu bekommen. |
Re: C++ -> Delphi
Zitat:
Delphi-Quellcode:
library Foo;
uses Windows; type PLoadInfo = ^TLoadInfo; TLoadInfo = record mVersion: DWORD; mHwnd : HWND; mKeep : BOOL; end; procedure LoadDll(var LoadInfo: TLoadInfo); stdcall; begin LoadInfo.mKeep = True; end; exports LoadDll; begin end. |
Re: C++ -> Delphi
@Robert: LoadLibrary() verwende ich in der DLL selbst? ich kenn das nur das man das von seinem Programm aus macht um die DLL zu laden. Den Part müsste doch eigentlich mIRC übernehmen.
@Nico: Ich versuche es dann mal umzuändern *g*. Edit: @Nico: Wenn ich "var" bei der Prozedur weglasse, stürzt mirc nicht ab, aber gibt "0" zurück und ein erneuter aufruf führt zum Absturz, wenn ich "var" benutze stürzt mirc direkt beim aufruf ab. (Danke für dein Codebeispiel btw) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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