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 : S�lectionner tout - Visualiser dans une fen�tre � part
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 : 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
J'ai la m�me erreur avec MinGW :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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 : 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