![]() |
C/C++ - Dll Importe und Procedurezeiger
Hi,
weiß jemand von euch, wie man in C/C++ Funktionen aus Dlls importiert? (was für ne Frage.. natürlich wisst ihr es, aber verratet ihr es mir auch? ;) :mrgreen: ) Und dann wüßte ich noch gerne wie man in C/C++ Prozedurzeiger deklariert, also sowas in der art:
Delphi-Quellcode:
nur halt in C/C++...
type
TMyFunction = function: Boolean; TMyProcedure = procedure (x: Integer); Dankeschön! 8) |
Re: C/C++ - Dll Importe und Procedurezeiger
Bei C++ musst du, um die Funktion in Delphi zu importieren all deine Funktionen in ein
Delphi-Quellcode:
schreiben. Ansonsten benutzt der C++ Compiler das Namemangling, was du dann selbst je nach C++ Compiler austüfteln kannst.
extern "C" { ... }
Delphi-Quellcode:
Prozedurzeiger:
function MyCFunction(MyParam: Integer); cdecl; external 'HierUndDa.dll';
Delphi-Quellcode:
MYCALLBACK c = MyCallBackFunction;[/delphi]
// type MYCALLBACK = function(Value: Integer): Char;
typedef char (*MYCALLBACK)(int Value); |
Re: C/C++ - Dll Importe und Procedurezeiger
Wie ich in Delphi Funktionen importier weiß ich, ich brauchs jetzt aber mal umgekehrt! ;) Ich will in C Funktion aus einer Delphi-Dll importieren!
Aber der 2te Teil hilft mir auch schonmal weiter! Danke! :) |
Re: C/C++ - Dll Importe und Procedurezeiger
Soweit ich weiß, gibt es von MS ein Tool, mit welchem sich LIBs erstellen lassen. Und genau die brauchst du ja für statische Importe in C. Ansonsten dynamisch (s.o.)
|
Re: C/C++ - Dll Importe und Procedurezeiger
Zitat:
1.) Definitions-Datei anlegen (in diesem Beispiel 'C:\Temp\Test.def' für 'Test.dll' mit den Exporten 'Foo' und 'Bar')
Code:
2.) Import-Bibliothek erzeugen
LIBRARY Test
EXPORTS Foo Bar
Code:
3.) ... (Include-Headerdatei schreiben und .lib + .h ins Projekt aufnehmen)
C:\Temp> LINK -LIB /DEF:Test.def /MACHINE:X86
Microsoft (R) Library Manager Version 7.10.3077 Copyright (C) Microsoft Corporation. All rights reserved. Bibliothek 'Test.lib' und Objekt 'Test.exp' wird erstellt C:\Temp> DEL Test.exp Gruß Nico ps: um sich bei vielen Exporten die Arbeit zu erleichtern: LINK -DUMP Test.dll /EXPORTS > Test.def [edit] habs doch noch gefunden: ![]() |
Re: C/C++ - Dll Importe und Procedurezeiger
Hehe ...
"Kann man mit den vorhandenen Tools erledigen..." Und LINK ist kein Tool von MS? |
Re: C/C++ - Dll Importe und Procedurezeiger
Zitat:
...naja, jedenfalls muss er nicht länger suchen. |
Re: C/C++ - Dll Importe und Procedurezeiger
Ist zwar schon etwas länger her, aber jetzt hab ein neues Problem mit meinen Procedurezeigern, und ich weiß nicht ob es an meiner Deklaration liegt oder daran, dass ich die Variable global benötige und die Header-Datei daher in mehrere cpp-Files include...
Code:
(VNC_Methods ist ein Record)
typedef VNC_Methods* (*TFNLP_vncInitController)();
TFNLP_vncInitController vncInitController; Diese 2 Zeilen stehen in einer Header-Datei, die ich dann in 3 cpp-Files benötige. Beim kompilieren erhalte ich allerdings die Meldung "already defined": Zitat:
Wer weiß worans liegt? :? |
Re: C/C++ - Dll Importe und Procedurezeiger
Du mußt dafür sorgen, daß die Deklaration nur einmal verarbeitet wird.
Zum Beispiel mit 'Header-Guards':
Code:
#ifndef _FILENAME_HPP_
#define _FILENAME_HPP_ //... #endif //_FILENAME_HPP_ |
Re: C/C++ - Dll Importe und Procedurezeiger
Hi,
ich hab's genauso gemacht, wie es von NicoDE beschrieben wurde, aber es kommt immer folgende Fehlermeldung: Zitat:
Delphi-Quellcode:
Und so meine C-Header:
library Dll;
uses SysUtils, Classes, frDllForm in 'frDllForm.pas' {DllForm}; {$R *.res} procedure CreateWindow; stdcall; begin DllForm := TDllForm.Create(nil); DllForm.Show; end; exports CreateWindow; begin end.
Code:
#ifndef DLL_H
#define DLL_H extern void CreateWindow(); #endif |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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