Salut,
Je dispose de sources C++ que je devrai compiler sous Linux pour au final être utiliser sous windows (C#). Aille ! Aille ! Aille !
Je tente donc quelques essais mais en vain pour l'instant...
Mon fichier tux.h (je ne mets pas les cpp qui sont sans intérêt) sous Linux est :
Code :
- #ifndef TUX_H
- #define TUX_H
- #define DLL_EXPORT __declspec(dllexport)
- extern "C"{
- class DLL_EXPORT Tux
- {
- private:
- const char* NAME;
- public:
- Tux(void){NAME="Racer";}
- const char* __stdcall getName();
- };
- }
- #endif //TUX_H
|
Je compile avec mingw32 sous linux:
Code :
- i586-mingw32msvc-g++ -Wall -shared tux.cc -o tux.dll -Wl,--output-def,tux.def
|
Je passe sous Windows...
Je crée la lib :
Je crée mon projet VSC++ (CLR pour pouvoir plus tard appeler ma classe depuis C#).
J'inclus mon tux.h, je mets tux.dll et tux.lib dans le répertoire de debug.
J'écris mon wrapper WrappingUx.h:
Code :
- #include "stdafx.h"
- #include "tux.h"
- #pragma comment (lib, "./tux.lib" )
- #include <msclr\auto_handle.h>
- #pragma once
- public ref class TuxWrapper
- {
- private:
- Tux *m_pTux;
- public:
- TuxWrapper();
- ~TuxWrapper();
- System::String^ getName();
- };
|
Ca compile mais au linkage ... crash :
Error 1 error LNK2028: unresolved token (0A00000D) "public: char const * __stdcall Tux::getName(void)" (?getName@Tux@@$$FQAGPBDXZ) referenced in function "public: class System::String ^ __clrcall TuxWrapper::getName(void)" (?getName@TuxWrapper@@$$FQ$AAMP$AAVString@System@@XZ) WrappingUx.obj WrappingUx
Error 2 error LNK2019: unresolved external symbol "public: char const * __stdcall Tux::getName(void)" (?getName@Tux@@$$FQAGPBDXZ) referenced in function "public: class System::String ^ __clrcall TuxWrapper::getName(void)" (?getName@TuxWrapper@@$$FQ$AAMP$AAVString@System@@XZ) WrappingUx.obj WrappingUx
Error 3 fatal error LNK1120: 2 unresolved externals C:\Work\Leny\CPP\Tests\CrossCompilation\C#\TestDllImport\Debug\WrappingUx.dll WrappingUx |
Et là, je sèche carrément.
J'ai essayé de jouer avec les extern, __stdcall, dllexport, .... rien à faire
Quelqu'un aurait-il une idée du problème ?
Une alternative ?
Une info qui pourrait m'être utile?
Merci d'avance pour votre aide.