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 :
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 :
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 :
[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"
Citation:
| "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 :
[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

Bossun
P.S1 C'est mieux de prendre son pied que de se prendre la tête!
/F