![]() |
Wiedermal C++ nach Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöchen,
also forlgendes Problem: Ich brauche ein Modul für den FS2002/04 von Microsoft, wird ja jeder kennen. Diese Module werden als *.dll geschrieben und dann nur in das Modules verzeichnis vom FS kopiert und das wars. Die laufen dann direkt mit wenn der FS läuft. So, ich habe nun den Code für so eine DLL in C++ hier, brauch das ganze aber unbedingt als Delphi. Ich hab mir schon die Zähne ausgebissen daran, leider ohne Erfolg. Was ich herausbekommen habe ist welche variable wie deklariert werden muss, aber das is auch schon fast alles. Hier mal die grössten meiner Probleme:
Code:
So, "struct" is doch in Delphi ein Record ja.Aber wie kann ich denn
typedef struct _MODULE_IMPORT {
struct { int fnID; PVOID fnptr; } IMPORTSentry; struct { int fnID; PVOID fnptr; } nullentry; } MODULE_IMPORT; innerhalb eines Records noch einen declarieren ??? ( IMPORTSentry und nullentry ) Dann das hier:
Code:
...aber ich glaube das muss in Delphi dann so aussehen :
void FSAPI module_init(void) {}
Code:
oder lieg ich da falsch?
procedure module_init;stdcall;
begin end; Jetzt kommt aber noch was wichtiges :
Code:
Damit weiss ich bis jetzt noch nicht wirklich was anzufangen und wie
DLLEXPORT MODULE_LINKAGE Linkage = {
0x00000000, module_init, module_deinit, 0, 0, 0x0900, // FS2004 version (use 0x0800 for FS2002) NULL }; ich 0x0900 als variablenwert eingeben soll weiss ich auch nicht? Ich weiss nicht mal was ich da nehmen muss, dene aber cardinal wäre da richtig oder? Leider mecker t Delphi immer wenn ich dann so nen wert ( 0x0900 ) verwenden will ???? Ich häng die beiden Dateien mal hier dran, vielleicht hat jemand erbarmen mit mir und schaut sich das ganze mal an, denn das is wirklich wichtig. Ach so, noch was: Warum meckert delphi immer, wenn ich ne *.dll compilieren will rum von wegen ich solle irgendeine Host anwendung auswählen ??? So, ich danke Euch schon mal für die Hilfe !! Matthias |
Re: Wiedermal C++ nach Delphi
Zitat:
Delphi-Quellcode:
;)
type ImportSentry = record (_Module_Import)
|
Re: Wiedermal C++ nach Delphi
malo, das ist Unsinn.
Delphi-Quellcode:
Das "packed" ist allerdings nur geraten.
type
TIMPORTSentry = packed record fnID: Integer; fnptr: Pointer; end; MODULE_IMPORT = packed record IMPORTSentry: TIMPORTSentry; nullentry: TIMPORTSentry; end; Das Problem mit "Linkage" kann ich dir hier nicht loesen, da dies eine initialisierte Variable ist. Es fehlt da aber Source um das korrekt zu uebersetzen. 0x0900 = $0900. |
Re: Wiedermal C++ nach Delphi
Du hast doch die Definition von MODULE_LINKAGE:
Code:
Das da:
typedef struct _MODULE_LINKAGE {
int ModuleID; void (FSAPI *ModuleInit)(void); void (FSAPI *ModuleDeinit)(void); UINT32 ModuleFlags; UINT32 ModulePriority; UINT32 ModuleVersion; PVOID ModuleTable; } MODULE_LINKAGE;
Code:
ist die Initialisierung einer Variablen vom Typ MODULE_LINKAGE, die Zuordnung ist hier zu sehen.
DLLEXPORT MODULE_LINKAGE Linkage = {
0x00000000, module_init, module_deinit, 0, 0, 0x0900, // FS2004 version (use 0x0800 for FS2002) NULL }; |
Re: Wiedermal C++ nach Delphi
Zitat:
das hier
Code:
sieht in Delphi so aus:
0x0900
Code:
$0900
Zitat:
|
Re: Wiedermal C++ nach Delphi
Hallöchen,
nachdem ich mir in einigen Foren und auch per Meil schon hab helfen lassen bin ich ein bischen weiter. Hier mal der jetzige code als überblick.
Code:
Allerdings meckert der Flugsimulator immer wenn ich die DLL verwenden will.
uses
SysUtils, Classes; type TIMPORTSentry = record fnID : LongInt; fnptr : pointer; end; Tnullentry = record fnID : LongInt; fnptr : pointer; end; MODULE_IMPORT = record IMPORTSentry : TIMPORTSentry; nullentry : Tnullentry; end; TModuleInit = procedure;stdcall; TModuleDeinit = procedure;stdcall; MODULE_LINKAGE = record ModuleID : LongInt; ModuleInit : ^TModuleInit; ModuleDeinit : ^TModuleDeinit; ModuleFlags : cardinal; ModulePriority : cardinal; ModuleVersion : cardinal; ModuleTable : pointer; end; {$R *.res} procedure ImportTable;stdcall; var IMPORTSentry : TIMPORTSentry; nullentry : Tnullentry; begin IMPORTSentry.fnID := 0; IMPORTSentry.fnptr := 0; nullentry.fnID := 0; nullentry.fnptr := 0; end; procedure Linkage;cdecl; var TMODULE_LINKAGE:MODULE_LINKAGE; ModuleInit : TModuleInit; ModuleDeinit : TModuleDeinit; begin TMODULE_LINKAGE.ModuleID := 0; TMODULE_LINKAGE.ModuleInit := @ModuleInit; TMODULE_LINKAGE.ModuleDeinit := @ModuleDeinit; TMODULE_LINKAGE.ModuleFlags := 0; TMODULE_LINKAGE.ModulePriority := 0; TMODULE_LINKAGE.ModuleVersion := $0900; TMODULE_LINKAGE.ModuleTable := 0; end; exports Linkage,ImportTable; begin end. Hier mal noch die Mail von jemanden der auch ein Modul erstellt hat, allerdings eben auch nur in C++.: Zitat:
module_init // (this is the subroutine we added before) module_deinit // (this is the other subroutine) Vielleicht kann ja doch nochmal jemand schauen ob das so hinhauen könnte ? Vielen Dank Matthias |
Re: Wiedermal C++ nach Delphi
Code:
Was genau meckert er denn?
Allerdings meckert der Flugsimulator immer wenn ich die DLL verwenden will.
|
Re: Wiedermal C++ nach Delphi
Hallo,
naja, der sagt nur das das Modul welches geladen werden soll fehlerhaft ist. Ich weiss nicht ob Du den Microsoft Flugsimulator 2004 kennst. Da kann man per Modul ( *.dll ) AddOn`s programmieren. Die DLL wird dann nur ins Modules Verzeichnis kopiert und dann wird die DLL beim Starten des FlugSim eben mitgeladen. Zweck meiner DLL ist eine Art Flugrekorder. Erstes Ziel ist erst mal die dll zum laufen zu bekommen und einen neuen Menü Eintrag in das vorhanden FlugSim Menü zu integrieren. ( btw erst mal das er nicht mehr meckert ) Wenn das erst mal gehen würde wär ich endlich einen kleinen schritt weiter. Matthias |
Re: Wiedermal C++ nach Delphi
Zitat:
Ich seh' mir den Source mal morgen an, wenn bis dahin noch niemand geantwortet hat. |
Re: Wiedermal C++ nach Delphi
Hallo,
da wär ich Dir echt dankbar ! Ich mach jetzt auch erst mal schicht für heute, das bringt sonst nix mehr. Hier aber mal noch die komplette Mail von dem der das andere modul geschrieben hatte: Zitat:
Bis morgen dann Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 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