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 :
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 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) ; }
J'ai tenté d'appeler la fonction en utilisant
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é 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
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'obtiens toujours une exception "AccessViolationException"
Je suis sûr que la fonction de la DLL fonctionne parfaitement car déjà utilisée dans une vieux programme C."Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée"
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
Partager