Appeler du code C# � partir de code C
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
Code:
Warning LNK4221 : no public symbols found; archive member will be inaccessible
Et effectivement, quand j'essaie d'appeler ma dll depuis un code C++ natif, j'ai une erreur au lien avec le fichier .lib.
Sous VISUAL 2008 :
Code:
Error 1 error LNK2019: unresolved external symbol __imp__getSupportedLanguages referenced in function _wmain win32_testdll.obj win32_testdll
J'ai la m�me erreur avec MinGW :
Code:
undefined reference to "__imp__getSupportedLanguages"
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.
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:
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 |