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