Cześć,
Celem jest zrobienie dll do operowania na plikach graficznych. Sam algorytmów nie będę implementował. Użyję do tego biblioteki imagemagick, a dokładnie jej portu do C++ - Magick++. Chcę ją linkować statycznie do mojej dll, żeby była samodzielna. Cała biblioteka będzie w C++, ale interfejs musi być w C.
Z pomocą tutoriala: http://www.imagemagick.org/script/install-source.php zbudowałem statyczne biblioteki ImageMagick, w których jest również Magick++.
Przy budowaniu mojej dll linkuję do bibliotek CORE_RL_MagickWand.lib, CORE_RL_MagickCore.lib i CORE_RL_Magick++.lib
Aktualne poglądowe rozwiązanie w mojej dll:
dllCHeader.h
#ifndef DLL_C_HEADER
#define DLL_C_HEADER
#ifdef DLL_COMPILE
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
#include "dllCppHeader.h"
#ifdef __cplusplus
extern "C" {
#endif
DLL_EXPORT int robCos( int parametr );
#ifdef __cplusplus
}
#endif
#endif
dllCSource.cpp
#include "dllCHeader.h"
#ifdef __cplusplus
extern "C" {
#endif
DLL_EXPORT int robCos( int parametr )
{
return robCosCpp( parametr );
}
#ifdef __cplusplus
}
#endif
dllCppSource.cpp
#include <Magick++.hpp>
int robCosCpp( int parametr )
{
return Magick::robCos( parametr );
}
Nie wiem co zrobiłem źle, ale mam problem. Przy kompilacji dll lecą unresolved external wszystkie tego typu:
error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall Magick::Image::~Image(void)" (__imp_??1Image@Magick@@UAE@XZ)
Co to oznacza wiem (no nie do końca, ale to potem).
Za pomocą dumpbin podglądnąłem co ma w sobie zbudowana wcześniej biblioteka CORE_RL_Magick++.lib. I znalazłem tam to czego nie mogła znaleźć moja dll:
547 00000000 UNDEF notype () External | ??1Image@Magick@@UAE@XZ (public: virtual __thiscall Magick::Image::~Image(void))
No jest, tylko nie do końca i myślę, że z tym jest problem. Moja dll wywala błąd, na początku którego jest: **__declspec(dllimport) **.
I tu w końcu moje pytanie, czy może ktoś wie dla czego moja dll we wszystkich szukanych symbolach ma **__declspec(dllimport) **?