Bonjour � tous,
j'ai besoin d'encapsuler un code C# dans un code C, pour permettre l'interop�rabilit� avec d'autres langages qui ne supportent pas .NET, et je gal�re un peu.
J'ai pens� qu'encapsuler ma dll C# avec du C++/CLI, puis passer du C++/CLI au C serait la bonne m�thode. J'ai essay� de faire tout �a dans la m�me dll, ce qui n'est peut-�tre pas une bonne id�e.
J'ai mis ma dll C++/CLI en mode /clr, qui permet l'interop�rabilit�. Pourtant, quand je compile mon code en dll, aucun fichier .lib n'est g�n�r�, alors qu'habituellement il y en a un. Quand je compile en statique, j'ai un
Et effectivement, quand j'essaie d'appeler ma dll depuis un code C++ natif, j'ai une erreur au lien avec le fichier .lib.
Code : S�lectionner tout - Visualiser dans une fen�tre � part Warning LNK4221 : no public symbols found; archive member will be inaccessible
Sous VISUAL 2008 :
J'ai la m�me erreur avec MinGW :
Code : S�lectionner tout - Visualiser dans une fen�tre � part Error 1 error LNK2019: unresolved external symbol __imp__getSupportedLanguages referenced in function _wmain win32_testdll.obj win32_testdll
Au moins mes compilos sont d'accord, ce doit �tre ma librairie en C++/CLI qui n'exporte pas les bons symboles. Je suppose que c'est une histoire de manag�/pas manag�, mais je ne sait pas trop comment m'y prendre.
Code : S�lectionner tout - Visualiser dans une fen�tre � part undefined reference to "__imp__getSupportedLanguages"
La question finalement c'est de savoir comment faire pour obtenir une dll avec une interface externe non manag�e et une interface interne manag�e! Dans la FAQ c'est surtout le contraire qui est bien montr�. Quelqu'un aurait une id�e pour faire �a?
Je rajoute mon fichier .h si �a peut aider :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 // dll_c.h #ifndef DLL_C_H #define DLL_C_H #pragma once #ifdef DLL_EXPORT #define DllImportExport __declspec( dllexport ) #else #define DllImportExport __declspec( dllimport ) #endif //#include <stdlib.h> //using namespace System; namespace dll_c { #ifdef __cplusplus extern "C" { #endif DllImportExport int getSupportedLanguages(char **langages, int *arraySize, char *errormsg); #ifdef __cplusplus } #endif } #endif //DLL_C_H
Partager