Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C/C++ - Dll Importe und Procedurezeiger (https://www.delphipraxis.net/10268-c-c-dll-importe-und-procedurezeiger.html)

neolithos 1. Jul 2004 12:19

Re: C/C++ - Dll Importe und Procedurezeiger
 
Versuch es mal mit __stdcall void CreateWindow();

NicoDE 1. Jul 2004 12:35

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

Zitat von Stevie
ich hab's genauso gemacht, wie es von NicoDE beschrieben wurde

Folgende Ansätze:
- CreateWindow ist zum Testen sicher kein 'guter' Name (da es eine API gleichen Namens gibt und der Linker vielleicht nicht damit zurecht kommt.
- Du hast die Funktion in C++ mit
Code:
extern "C" __declspec(dllimport) __stdcall
deklariert und die Importe in die DEF-Datei eingetragen (sonst sucht der Linker nach _CreateWindow@0 und nicht CreateWindow).


Gruss Nico

ps: das Schlüsselwort 'extern' hat in C++ eine völlig andere Bedeutung und nichts mit Im-/Exporten zu tun.

Stevie 1. Jul 2004 12:42

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

Zitat von neolithos
Versuch es mal mit __stdcall void CreateWindow();

Code:
#ifndef DLL_H
#define DLL_H

__stdcall void CreateWindow();

#endif
Zitat:

--------------------Konfiguration: Konsole - Win32 Debug--------------------
Kompilierung läuft...
Konsole.c
e:\programme\visual studio 6\msdev98\myprojects\delphi\konsole\dll.h(4) : error C2059: Syntaxfehler : 'type'
e:\programme\visual studio 6\msdev98\myprojects\delphi\konsole\konsole.c(4) : warning C4013: 'CreateWindow' undefiniert; Annahme: extern mit Rueckgabetyp int
Fehler beim Ausführen von cl.exe.
Browse-Informationsdatei wird erstellt...

Konsole.exe - 1 Fehler, 1 Warnung(en)
@NicoDE Hallooo? :mrgreen:
Zitat:

Zitat von Motzi
Wie ich in Delphi Funktionen importier weiß ich, ich brauchs jetzt aber mal umgekehrt! Ich will in C Funktion aus einer Delphi-Dll importieren!


neolithos 1. Jul 2004 12:46

Re: C/C++ - Dll Importe und Procedurezeiger
 
Und nun bin ich ruhig!
Ich habe es bis jetzt leider nur C-Dll -> Delphi gemacht! :(

Ich weis nur das der andere weg etwas komlizierter ist. Muss man da nicht irgentwelche Datein erzeugen (.LIB).

NicoDE 1. Jul 2004 12:48

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

Zitat von Stevie
@NicoDE Hallooo? :mrgreen:

Frag mich nach dem ersten Kaffee nochmal :D

Siehe meinen (oft) editierten Beitrag:
Code:
extern "C" {

__declspec( dllimport ) __stdcall void Foo();

}
Und die mittels DEF-Datei generierte LIB nicht vergessen.

Stevie 1. Jul 2004 12:51

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

Zitat von neolithos
Und nun bin ich ruhig!
Ich habe es bis jetzt leider nur C-Dll -> Delphi gemacht! :(

Das ist ja Pille-Palle. Das bekomm ja sogar ich schon hin! :mrgreen:
Zitat:

Zitat von neolithos
Ich weis nur das der andere weg etwas komlizierter ist. Muss man da nicht irgentwelche Datein erzeugen (.LIB).

Ey, lest ihr heute alle nicht, oder was? :mrgreen: Das hat NicoDE doch oben erklärt! :drunken:

Stevie 1. Jul 2004 12:55

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

Zitat von NicoDE
Frag mich nach dem ersten Kaffee nochmal :D

Wann trinkst du denn deinen ersten Kaffee? :gruebel:
Zitat:

Zitat von NicoDE
Siehe meinen (oft) editierten Beitrag

Code:
#ifndef DLL_H
#define DLL_H

extern "C" __declspec(dllimport) __stdcall void FensterErstellen();

#endif
Zitat:

--------------------Konfiguration: Konsole - Win32 Debug--------------------
Kompilierung läuft...
Konsole.c
e:\programme\visual studio 6\msdev98\myprojects\delphi\konsole\dll.h(4) : error C2059: Syntaxfehler : 'string'
e:\programme\visual studio 6\msdev98\myprojects\delphi\konsole\konsole.c(4) : warning C4013: 'FensterErstellen' undefiniert; Annahme: extern mit Rueckgabetyp int
Fehler beim Ausführen von cl.exe.
Browse-Informationsdatei wird erstellt...

Konsole.exe - 1 Fehler, 1 Warnung(en)

NicoDE 1. Jul 2004 13:02

Re: C/C++ - Dll Importe und Procedurezeiger
 
off-topic: spät ;)

topic:
- sicher dass die LIB im Projekt vorhanden ist?
- die Endung .c sorgt dafür dass der Code als C und nicht als C++ kompiliert wird (extern "C" gibt es nur für C++)

Stevie 1. Jul 2004 13:09

Re: C/C++ - Dll Importe und Procedurezeiger
 
Ok, ich hab jetzt die Datei in *.cpp umbenannt. (Kann man nur in C++ dlls importieren?)
Außerdem hab ich meine lib unter Objekt-/Bibliothek-Module eingetragen.

Zitat:

Konsole.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__FensterErstellen
Meine *.def-Datei, nach der ich die *.lib erstellt hab, sieht so aus:
Code:
Microsoft (R) COFF Binary File Dumper Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.


Dump of file Dll.dll

File Type: DLL

  Section contains the following exports for Dll.dll

           0 characteristics
           0 time date stamp Thu Jan 01 01:00:00 1970
        0.00 version
           1 ordinal base
           1 number of functions
           1 number of names

    ordinal hint RVA     name

          1    0 0005436C FensterErstellen

  Summary

        1000 .edata
        3000 .idata
        6000 .reloc
        4000 .rsrc
        1000 BSS
       54000 CODE
        2000 DATA

NicoDE 1. Jul 2004 14:21

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

Zitat von Stevie
Kann man nur in C++ dlls importieren?

Nope, dann muss man das extern "C" weglassen. Eine allgemeine Lösung für C/C++ sieht etwa so aus:
Code:
/* dll.h */
#ifndef DLL_INCLUDED
#define DLL_INCLUDED

/* #pragma lib "dll.lib" */

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllimport) __stdcall void FensterErstellen();

#ifdef __cplusplus
}
#endif

#endif /* DLL_INCLUDED */


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
Seite 2 von 3     12 3      

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