001
21.09.2011, 20:07 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Hi,
naja versteh ich das richtig?
Deine Exe läd eine DLL und deine DLL läd eine weitere DLL?
Jedenfalls solltest du normalerweise von deinen DLLs folgendermaßen exportieren
DLL1: (im vs Projektname PROJECTDLL1 - d.h das define PROJECTDLL1_EXPORTED wird automatisch vom VC generiert, genauen namen bitte in den projekteinstellungen nachsehen)
C++: |
#ifdef PROJECTDLL1_EXPORTED #define PROJECTDLL1API __declspec(dllexport) #else #define PROJECTDLL1API __declspec(dllimport) #endif
//...
#include "dllproject2.h"
PROJECTDLL1API void my_exported_function1() { // hier rufen wir die 2te dll auf my_exported_function2(); }
|
DLL2 schaut dann simultan aus:
C++: |
#ifdef PROJECTDLL2_EXPORTED #define PROJECTDLL2API __declspec(dllexport) #else #define PROJECTDLL2API __declspec(dllimport) #endif
//...
PROJECTDLL2API void my_exported_function2() { // ... }
|
EXE:
C++: |
#include "dllproject1.h"
int main(void) { my_exported_function1(); }
|
Der Compiler macht dann intern folgendes:
für die DLL2 ist PROJECTDLL2API auf export gesetzt. für die DLL1 ist PROJECTDLL1API auf export gesetzt, und PROJECTDLL2API auf import. für die Exe ist PROJECTDLL1API auf import gesetzt.
So kann nun die Exe die DLL1 laden, und DLL1 die DLL2, ohne das du dem Compiler versehentlich sagst, er soll alle DLL2 symbole in DLL1 nochmals exportieren. -- class God : public ChuckNorris { }; Dieser Post wurde am 21.09.2011 um 20:09 Uhr von FloSoft editiert. |