Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dll in C Programm einbinden ?? Warum klappts nicht !

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
10.02.2004, 11:41 Uhr
~Micha03
Gast


Ich habe folgende Frage:
Meine Funktion in der DLL habe ich wie folgt definiert

C++:
//  Ausgabe des Versionsstrings.
#ifdef __cplusplus
  extern "C" {
#endif
__declspec(dllexport) char  * __stdcall get_version(void);
#ifdef __cplusplus
  }
#endif


diese habe ich mit einem VC++ Compiler erzeugt und es hat Funktioniert.

Wie kann ich diese DLL's jetzt in einem C Kompiler einbinden.
Der erste Versuch hat nicht funktioniert !!!
Habe ich bei der Erstellung einen Fehler bei der definition ??
So habe ich die Funktionen im C Programm eingebunden:

C++:
/* ------------------------ Deklaration functions ---------------------- */
extern __declspec(dllexport) char * __stdcall get_version(void);


und bekomme ich beim Linker einen Fehler.

Wer kann mir helfen was mache ich falsch ??
Danke für eure Tipps.

Dieser Post wurde am 10.02.2004 um 12:01 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.02.2004, 11:59 Uhr
Pablo
Supertux
(Operator)


das ist nicht ANSI C/C++, -->
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.02.2004, 12:57 Uhr
mike
Pinguinhüpfer
(Operator)


Moin
Welchen Fehler bekommst du? Hast du dllimport auch benutzt? Welchen C Compiler hast du?

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.02.2004, 14:13 Uhr
~Micha03
Gast


Hi Mike,

folgenden Compiler verwende ich Ansi-C der bei LabWindows von NationalInstument dabei ist.

Die Fehlemeldung bekomme ich vom Linker.
"Undefined symbol '_get_version@0' "
Irgendwie weiß ich nicht ob ich meine Definitionen soweit richtig gemacht habe,

Code:
//  Ausgabe des Versionsstrings.
#ifdef __cplusplus
  extern "C" {
#endif
__declspec(dllexport) char  * __stdcall get_version(void);
#ifdef __cplusplus
  }
#endif


so dass mein DLL von jedem Ansi C Compiler aufgerufen werden kann.

Mit MSVC++ 6.0 habe ich eine kleine Consolenapllikation geschrieben und es klappt.

Aber nicht mit dem ANSI C Compiler von LabWindows habe ich was falsch definiert?
Danke nochmals.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.02.2004, 14:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


__declspec(dllexport)

ist MS-spezifisch
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.02.2004, 14:43 Uhr
Tommix



Hallo,
LabWindows ist eine ganz fürchterliche Krücke. Ich muss auch oft damit arbeiten - so lernt man Microsoft zu schätzen.
Ich habs seinerzeit zu Fuß gemacht:

C++:
#include <windows.h>

static HMODULE dllHandle = NULL;    
char* (*get_version)(void);

void LoadDLL()
{
    dllHandle = LoadLibrary("MyDLL.dll"); // todo: darf nicht NULL sein
    get_version = (void*)GetProcAddress(dllHandle, "get_version") // dto.
}



Wenn alles geklappt hat, kannst Du get_version() ganz normal aufrufen. Der Header der DLL wird hier nicht benötigt.

Gruss, Tommix


Bearbeitung:

Am Ende muss noch FreeLibrary(dllHandle) stehen.


Dieser Post wurde am 10.02.2004 um 14:45 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.02.2004, 09:27 Uhr
~Micha03
Gast


Danke für eure Tipps,

In LabWindows unter Menüpunkt
Options / Generate DLL Import Library
kann das vorhandene HeaderFile der DLL in der LabWindows
Konvension angepasst werden.
Es wird eine neue *.lib Datei erzeugt und dann Funktioniert es.
Den Lösungsvorschlag von Tommix werde ich heute auch testen.

Danke für eure Tipps die haben mich zu einer Lösung weitergeholfen.

Micha
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.02.2004, 15:08 Uhr
Marcus



Hallo,

ich habe eine DLL unter eVC++ erstellt. In der Exporttable ist die
Funktion aufgeführt. Wenn ich aber mit LoadLibrary() und
GetProcAddress() auf die DLL zugreifen möchte liefert mir
die Funktion GetProcAddress() immer 0 zurück, obwohl
ich mit LoadLibrary() die Adresse der Dll erhalte.
Mein einizer Hinweis auf einen Fehler ist, wenn ich mir
die Exporttable anschaue sind die Funktionen mit einem ?
versehen.

Hab ihr vielleicht eine Idee woran ich scheitere?

Marcus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.02.2004, 15:25 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!

Zitat:

If the function fails, the return value is NULL. To get extended error information, call GetLastError.


Was gibts das aus?

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.02.2004, 15:41 Uhr
Marcus



Hi,

mein Aufruf:

pProc = GetProcAddress( hDll, _T ("MeineDll"));

GetLastError liefert 87 (inval. Para.)

Wenn ich in einem Tool mir die Exports anschaue
wird die Funktion so dargestellt:

?fnMeindDll@@YAXXZ
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: