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 2 von 3     12 3      
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#11

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

  Alt 1. Jul 2004, 13:19
Versuch es mal mit __stdcall void CreateWindow();
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#12

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

  Alt 1. Jul 2004, 13:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

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

  Alt 1. Jul 2004, 13:42
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?
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!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#14

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

  Alt 1. Jul 2004, 13:46
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).
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#15

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

  Alt 1. Jul 2004, 13:48
Zitat von Stevie:
@NicoDE Hallooo?
Frag mich nach dem ersten Kaffee nochmal

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

__declspec( dllimport ) __stdcall void Foo();

}
Und die mittels DEF-Datei generierte LIB nicht vergessen.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

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

  Alt 1. Jul 2004, 13:51
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!
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? Das hat NicoDE doch oben erklärt!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

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

  Alt 1. Jul 2004, 13:55
Zitat von NicoDE:
Frag mich nach dem ersten Kaffee nochmal
Wann trinkst du denn deinen ersten Kaffee?
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)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#18

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

  Alt 1. Jul 2004, 14:02
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++)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

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

  Alt 1. Jul 2004, 14:09
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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#20

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

  Alt 1. Jul 2004, 15:21
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 */
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17:13 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