Hallo Leute,
ich habe ein Linker-Problem. Ein Programm soll beim Start eine
DLL statisch laden und deren Exportroutinen aufrufen.
Die nachfolgende Headerdatei wird in sowohl von der DLL, als
auch von der die DLL ladenden Anwandung eingelesen. Das klappt bei anderen Projekten auch problemlos, aber bei diesem Projekt ist der Wurm drin!
Die gemeinsame Headerdatei ist (gekürzt) wie folgt:
================================================== ===============
#ifndef ExcSysDeclH
#define ExcSysDeclH
enum TExcDlgType {excStd, excSpc};
# ifdef __DLL__ // Kompilierung in der DLL **********************
extern "C" __declspec(dllexport)
bool __stdcall ExcSysInit(char* ApplFileSpec,
TExcDlgType ExcDlgType,
bool SaveWarning,
int MaxCount);
// weitere Routinendeklarationen ...
# else // Kompilierung in der verwendenden Anwendung ***********
extern "C" __declspec(dllimport)
bool __stdcall ExcSysInit(char* ApplFileSpec,
TExcDlgType ExcDlgType = excStd,
bool SaveWarning = false,
int MaxCount = 20);
// weitere entsprechende Routinendeklarationen ...
# endif //************************************************** *****
#endif
================================================== ===============
In der Anwendung befinden sich Aufrufe wie z. B:
ExcSysInit(Application->ExeName.c_str(), excStd, true);
und in der DLL ist die Exportroutine, deren Prototyp in der
Headerdatei zu finden ist:
bool __stdcall ExcSysInit(char* ApplFileSpec,
TExcDlgType ExcDlgType,
bool SaveWarning,
int MaxMsgCount)
{
...
}
Die Emulationsbibliothek der DLL ist natürlich dem Projekt der
Anwendung über die Projektverwaltung hinzugefügt worden und auch die Bibliothekspfade sind in den Projektoptionen richtg gesetzt.
Die DLL wird problemlos kompiliert und gelinkt! Die Kompilierung
der aufrufenden Anwendung wir ebenso problemlos ausgeführt, nur das Linken schlägt fehl mit der folgenden Meldung:
[Linker Fehler] Unresolved external 'ExcSysInit'
referenced from D:\...\DLLTESTFORM.OBJ
Diese Linkfehler kommen für alle Exportroutinen der DLL!
Ich weiss leider nicht mehr weiter!Die Hinweise der BCB-Hilfe
für diesen speziellen Linkfehler helfen mir auch nicht weiter!
Was habe ich da übersehen? Kann mir jemand helfen? Ich wäre
sehr dankbar.
Gruss
A-Thaddaeus
ich habe ein Linker-Problem. Ein Programm soll beim Start eine
DLL statisch laden und deren Exportroutinen aufrufen.
Die nachfolgende Headerdatei wird in sowohl von der DLL, als
auch von der die DLL ladenden Anwandung eingelesen. Das klappt bei anderen Projekten auch problemlos, aber bei diesem Projekt ist der Wurm drin!
Die gemeinsame Headerdatei ist (gekürzt) wie folgt:
================================================== ===============
#ifndef ExcSysDeclH
#define ExcSysDeclH
enum TExcDlgType {excStd, excSpc};
# ifdef __DLL__ // Kompilierung in der DLL **********************
extern "C" __declspec(dllexport)
bool __stdcall ExcSysInit(char* ApplFileSpec,
TExcDlgType ExcDlgType,
bool SaveWarning,
int MaxCount);
// weitere Routinendeklarationen ...
# else // Kompilierung in der verwendenden Anwendung ***********
extern "C" __declspec(dllimport)
bool __stdcall ExcSysInit(char* ApplFileSpec,
TExcDlgType ExcDlgType = excStd,
bool SaveWarning = false,
int MaxCount = 20);
// weitere entsprechende Routinendeklarationen ...
# endif //************************************************** *****
#endif
================================================== ===============
In der Anwendung befinden sich Aufrufe wie z. B:
ExcSysInit(Application->ExeName.c_str(), excStd, true);
und in der DLL ist die Exportroutine, deren Prototyp in der
Headerdatei zu finden ist:
bool __stdcall ExcSysInit(char* ApplFileSpec,
TExcDlgType ExcDlgType,
bool SaveWarning,
int MaxMsgCount)
{
...
}
Die Emulationsbibliothek der DLL ist natürlich dem Projekt der
Anwendung über die Projektverwaltung hinzugefügt worden und auch die Bibliothekspfade sind in den Projektoptionen richtg gesetzt.
Die DLL wird problemlos kompiliert und gelinkt! Die Kompilierung
der aufrufenden Anwendung wir ebenso problemlos ausgeführt, nur das Linken schlägt fehl mit der folgenden Meldung:
[Linker Fehler] Unresolved external 'ExcSysInit'
referenced from D:\...\DLLTESTFORM.OBJ
Diese Linkfehler kommen für alle Exportroutinen der DLL!
Ich weiss leider nicht mehr weiter!Die Hinweise der BCB-Hilfe
für diesen speziellen Linkfehler helfen mir auch nicht weiter!
Was habe ich da übersehen? Kann mir jemand helfen? Ich wäre
sehr dankbar.
Gruss
A-Thaddaeus
Comment