hallo,
ich lese hier schon lange mit und habe auch schon viele tipps aus den thread bekommen.
diesmal konnte mir jedoch weder die foren suche noch google weiter helfen.
als compiler und IDE verwende ich jetzt visual studio 2005, zuvor habe ich mit embedde vc++ und vc 6 gearbeitet.
ich habe schon einige DLLs erstellt und sie auf die verschiedenste arten geladen, aber diesmal funktioniert einfach etwas nicht.
die DLL selbst ist in C geschrieben, aufrufen möchte ich sie aus einem Cpp programm.
zum laden der DLL und der funktionen verwende ich LoadLibrary bzw. GetProcAddress
mein problem ist daß ich mit GetProcAddress die funktion nicht laden kann da er den funktionsnamen nicht kennt, verwende ich den c++ namen so kann die funktion jedoch geladen werden.
ich bin mir sicher daß ich etwas übersehen habe und hoffe auf eure hilfe.
hier ein auszug aus dem code
DLL-header:
und hier wie ich die dll/funktion lade:
wenn ich
verwende kann die funktion nicht gefunden werden
wenn ich
verwende wird die funktion richtig geladen und kann verwendet werden
die funktion steht auch in der dll mit dem namen "_OpenInterface@0"
aber nach der deklaration mit EXTERN "C" würde ich doch "OpenInterface" erwarten.
schon mal vielen dank
grüße
AdmiralX
ich lese hier schon lange mit und habe auch schon viele tipps aus den thread bekommen.
diesmal konnte mir jedoch weder die foren suche noch google weiter helfen.
als compiler und IDE verwende ich jetzt visual studio 2005, zuvor habe ich mit embedde vc++ und vc 6 gearbeitet.
ich habe schon einige DLLs erstellt und sie auf die verschiedenste arten geladen, aber diesmal funktioniert einfach etwas nicht.
die DLL selbst ist in C geschrieben, aufrufen möchte ich sie aus einem Cpp programm.
zum laden der DLL und der funktionen verwende ich LoadLibrary bzw. GetProcAddress
mein problem ist daß ich mit GetProcAddress die funktion nicht laden kann da er den funktionsnamen nicht kennt, verwende ich den c++ namen so kann die funktion jedoch geladen werden.
ich bin mir sicher daß ich etwas übersehen habe und hoffe auf eure hilfe.
hier ein auszug aus dem code
DLL-header:
C:
#ifdef __cplusplus
extern "C" {
#endif
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
/** DLL export/import definitions */
#ifdef INTERFACE_EXPORTS
#define I_API __declspec(dllexport)
#else
#define I_API __declspec(dllimport)
#endif
/** Calling Convention */
#define I_CALL WINAPI
I_API DWORD I_CALL OpenInterface(void);
#ifdef __cplusplus
}
#endif
und hier wie ich die dll/funktion lade:
C:
typedef DWORD (WINAPI *OPENINTERFACE)(VOID);
C:
OPENINTERFACE OpenInterface;
...
hIPMILib = LoadLibrary("interface.dll");
...
C:
OpenInterface = (OPENINTERFACE) GetProcAddress(hIPMILib,"OpenInterface");
wenn ich
C:
OpenInterface = (OPENINTERFACE) GetProcAddress(hIPMILib,"_OpenInterface@0");
die funktion steht auch in der dll mit dem namen "_OpenInterface@0"
aber nach der deklaration mit EXTERN "C" würde ich doch "OpenInterface" erwarten.
schon mal vielen dank
grüße
AdmiralX