Salut,

j'essaie d�sesp�r�ment d'appeler une fonction c depuis un programme c#.

Ma fonction C est d�clar�e comme tel :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
extern "C" PAGODE
__declspec(dllexport)
__stdcall PagodePrice(char *ssj, double cours, char *cp, int jj, int mm, int aa, double strike, char *ae)
{
	return _PagodePrice(ssj, cours, cp, jj, mm, aa, strike, ae) ;
}
la structure de retour est d�clar�e de la sorte :

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
typedef struct PAGODES
{
  double value ;
  double delta ;
  double gamma ;
  double vega  ;
  double theta ;
  double rho   ;
  double dvega ;
	double dvvm  ;
	double rsmile ;
	double rdvmin ;
  double vol ;
	double volC ;
	double vegart ;
	double vegah ;
	double rsmileh ;
  double rsmilert ;
	char   ts[50] ;
} PAGODE ;
J'ai tent� d'appeler la fonction en utilisant
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
        [DllImport("pagode32.dll", EntryPoint = "_PagodePrice@40")]
        public static extern IntPtr PagodePrice(
            [In]string X_CODE_Long, [In]double cours, [In]string cp, [In]int jj, [In]int mm, [In]int aa, [In]double strike, [In]string ae);
J'ai tent� de remplacer l'Entrypoint par le nom de la fonction "PagodePrice", le type de retour IntPtr par une classe PAGODE �quivalente C# mais rien n'y fait
J'obtiens toujours une exception "AccessViolationException"

"Tentative de lecture ou d'�criture de m�moire prot�g�e. Cela indique souvent qu'une autre m�moire est endommag�e"
Je suis s�r que la fonction de la DLL fonctionne parfaitement car d�j� utilis�e dans une vieux programme C.

J'utilise une autre fonction de cette DLL qui fonctionne tr�s bien

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
        [DllImport("pagode32.dll",EntryPoint="PagodeForward")]
        public static extern double PagodeForward(
            [In]string X_CODE_Long, [In]double cours, [In]int jj, [In]int mm, [In]int aa);

Est-ce que quelqu'un a une id�e? Merci d'avance