Appeler une Fonction C depuis C#

Le
Bossun
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jérémy Jeanson
Le #18821511
Bonjour Bossun,

De tête je crois que le "Dllimport" est utilisable si ta dll est
enregistrée via regsvr32, non?

As tu tout simplement tenté d'utiliser la fonction "Ajouter une
référence" de Visual Studio?
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Bossun
Le #18821641
Salut Jérémy,

Merci pour ta réponse mais la DLL n'a pas besoin d'être enregistrée.


Mon problème se situe certainement dans la structure PAGODE.

J'ai une autre fonction PagodeForward retournant un double qui fonctionne
très bien.
Publicité
Poster une réponse
Anonyme