AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C/C++ - Dll Importe und Procedurezeiger
Thema durchsuchen
Ansicht
Themen-Optionen

C/C++ - Dll Importe und Procedurezeiger

Ein Thema von Motzi · begonnen am 15. Okt 2003 · letzter Beitrag vom 1. Jul 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#1

C/C++ - Dll Importe und Procedurezeiger

  Alt 15. Okt 2003, 09:14
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? )

Und dann wüßte ich noch gerne wie man in C/C++ Prozedurzeiger deklariert, also sowas in der art:
Delphi-Quellcode:
  type
    TMyFunction = function: Boolean;
    TMyProcedure = procedure (x: Integer);
nur halt in C/C++...

Dankeschön! 8)
Manuel Pöter
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 15. Okt 2003, 09:48
Bei C++ musst du, um die Funktion in Delphi zu importieren all deine Funktionen in ein
extern "C" { ... } schreiben. Ansonsten benutzt der C++ Compiler das Namemangling, was du dann selbst je nach C++ Compiler austüfteln kannst.

function MyCFunction(MyParam: Integer); cdecl; external 'HierUndDa.dll'; Prozedurzeiger:
Delphi-Quellcode:
// type MYCALLBACK = function(Value: Integer): Char;
typedef char (*MYCALLBACK)(int Value);
MYCALLBACK c = MyCallBackFunction;[/delphi]
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#3

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 15. Okt 2003, 10:08
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!
Manuel Pöter
  Mit Zitat antworten Zitat
Der Felertoifel
(Gast)

n/a Beiträge
 
#4

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 16. Okt 2003, 00:16
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.)
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 16. Okt 2003, 01:40
Zitat von Der Felertoifel:
Soweit ich weiß, gibt es von MS ein Tool, mit welchem sich LIBs erstellen lassen.
Kann man mit den vorhandenen Tools erledigen...

1.) Definitions-Datei anlegen (in diesem Beispiel 'C:\Temp\Test.def' für 'Test.dll' mit den Exporten 'Foo' und 'Bar')
Code:
LIBRARY Test
EXPORTS
    Foo
    Bar
2.) Import-Bibliothek erzeugen
Code:
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
3.) ... (Include-Headerdatei schreiben und .lib + .h ins Projekt aufnehmen)


Gruß Nico

ps: um sich bei vielen Exporten die Arbeit zu erleichtern: LINK -DUMP Test.dll /EXPORTS > Test.def

[edit] habs doch noch gefunden: http://www.microsoft.com/msj/archive/S330.aspx [/edit]
  Mit Zitat antworten Zitat
Der Felertoifel
(Gast)

n/a Beiträge
 
#6

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 16. Okt 2003, 10:30
Hehe ...

"Kann man mit den vorhandenen Tools erledigen..."

Und LINK ist kein Tool von MS?
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#7

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 16. Okt 2003, 10:46
Zitat von Der Felertoifel:
Und LINK ist kein Tool von MS?

...naja, jedenfalls muss er nicht länger suchen.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#8

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 28. Okt 2003, 12:56
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:
typedef VNC_Methods* (*TFNLP_vncInitController)();

TFNLP_vncInitController      vncInitController;
(VNC_Methods ist ein Record)
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 von MSVC:
ControllerWrapper.obj : error LNK2005: "struct VNC_Methods * (__cdecl* vncInitController)(void)" (?vncInitController@@3P6APAUVNC_Methods@@XZA) already defined in ClientConnection.obj
Daemon.obj : error LNK2005: "struct VNC_Methods * (__cdecl* vncInitController)(void)" (?vncInitController@@3P6APAUVNC_Methods@@XZA) already defined in ClientConnection.obj
Der Procedurzeiger wird dazu verwendet eine Funktion einer dyn. geladenen Dll aufzurufen...

Wer weiß worans liegt?
Manuel Pöter
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 29. Okt 2003, 13:30
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_
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: C/C++ - Dll Importe und Procedurezeiger

  Alt 1. Jul 2004, 13:10
Hi,

ich hab's genauso gemacht, wie es von NicoDE beschrieben wurde, aber es kommt immer folgende Fehlermeldung:
Zitat:
--------------------Konfiguration: Konsole - Win32 Debug--------------------
Linker-Vorgang läuft...
Konsole.obj : error LNK2001: Nichtaufgeloestes externes Symbol _CreateWindow
Debug/Konsole.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Konsole.exe - 2 Fehler, 0 Warnung(en)
So sieht meine Dll aus:
Delphi-Quellcode:
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.
Und so meine C-Header:
Code:
#ifndef DLL_H
#define DLL_H

extern void CreateWindow();

#endif
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 21:33 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