AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ -> Delphi

Ein Thema von Pseudemys Nelsoni · begonnen am 22. Jun 2005 · letzter Beitrag vom 22. Jun 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

C++ -> Delphi

  Alt 22. Jun 2005, 03:21
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:
type
  PLOADINFO = ^TLOADINFO;
  TLOADINFO = record
    mVersion: DWORD;
    mHwnd: HWND;
    mKeep: BOOL;
  end;
  TLoadDll = procedure(LoadInfo: PLOADINFO); stdcall;
var
  LoadDll: TLoadDll;
Leider gibts beim Aufruf eine AV, jemand ne Ahnung wie es richtig aussehen müsste? <g>
Mario
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: C++ -> Delphi

  Alt 22. Jun 2005, 05:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: C++ -> Delphi

  Alt 22. Jun 2005, 12:30
Moin Robert,

Wie meinst du das mit Wert zuweisen? <g>
Welchen Wert? Wird im obigem C++-Code doch auch nicht gemacht oder?
Mario
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: C++ -> Delphi

  Alt 22. Jun 2005, 12:46
Zitat von Pseudemys Nelsoni:
Leider gibts beim Aufruf eine AV, jemand ne Ahnung wie es richtig aussehen müsste? <g>
Es sieht richtig aus.
Zeig mal den Code der die Struktur verwendet (C und Delphi).
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: C++ -> Delphi

  Alt 22. Jun 2005, 12:49
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:
Keeping a DLL Loaded after a call
By default a DLL is unloaded immediately after you make the /dll or $dll() call. You can keep a DLL loaded by including a LoadDll() routine in your DLL, which mIRC calls the first time you load the DLL:

void __stdcall (*LoadDll)(LOADINFO*);

typedef struct {
DWORD mVersion;
HWND mHwnd;
BOOL mKeep;
} LOADINFO;

mVersion contains the mIRC version number in the low and high words.

mHwnd contains the window handle to the main mIRC window.

mKeep is set to TRUE by default, indicating that mIRC will keep the DLL loaded after the call. You can set mKeep to FALSE to make mIRC unload the DLL after the call (which is how previous mIRCs worked).
Hats du da sonst noch ne Idee was ich da falsch gemacht haben könnte?


Übrigens habe ich den Methodenzeiger exportiert:

Delphi-Quellcode:
exports
  LoadDll;
Mario
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: C++ -> Delphi

  Alt 22. Jun 2005, 12:56
Zitat von Pseudemys Nelsoni:
Übrigens habe ich den Methodenzeiger exportiert
Gut, nur verstehe ich in dem Zusammenhang nicht, was der obige Code von Dir soll?
Zitat von Pseudemys Nelsoni:
Delphi-Quellcode:
var
  LoadDll: TLoadDll;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: C++ -> Delphi

  Alt 22. Jun 2005, 12:59
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?
Mario
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: C++ -> Delphi

  Alt 22. Jun 2005, 13:02
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.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: C++ -> Delphi

  Alt 22. Jun 2005, 13:04
Zitat von Pseudemys Nelsoni:
LoadDll ist ja der Zeiger auf die Prozedur, oder?
Nope, LoadDLL ist eine implementierte Prozedur in deiner DLL. Die C-Typdefinitiondient nur als Vorlage.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#10

Re: C++ -> Delphi

  Alt 22. Jun 2005, 13:08
@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)
Mario
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 09:24 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