begin process at 2010 02 10 08:43:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

Appeler une fonction C depuis c#


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Appeler une fonction C depuis c#

mardi 3 mars 2009 à 10:39:10 | Appeler une fonction C depuis c#

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



Bossun

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

/F
mardi 3 mars 2009 à 14:42:53 | Re : Appeler une fonction C depuis c#

Lutinore

Administrateur CodeS-SourceS

Salut, c'est étonnant que ta fonction renvoie une struct si complexe par valeur, P/Invoke n'est pas super à l' aise avec ce genre de signature. Récupérer un IntPtr ça signifie que la fonction renvoi un pointeur ce qui n'est pas le cas là, donc je ne vois que ça comme solution :

[ StructLayout(
    LayoutKind.Sequential,
        CharSet = CharSet.Ansi ) ]
private unsafe struct MYSTRUCT
{
    public int x;
    // MarshalDirectiveException !!
    //[ MarshalAs(
    //    UnmanagedType.ByValTStr,
    //        SizeConst = 2 ) ] //char s[ 2 ];
    //public string s;
 
    public fixed byte s[ 2 ];
}

[ DllImport( "PINVOKE.dll" ) ]
private static extern MYSTRUCT GetMyStruct( );

mercredi 4 mars 2009 à 14:32:48 | Re : Appeler une fonction C depuis c#

bossun

Salut Lutinore

J'ai essayé tout plein de variantes mais rien n'y fait... toujours la même erreur


Bossun

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

/F
mercredi 4 mars 2009 à 20:51:43 | Re : Appeler une fonction C depuis c#

Lutinore

Administrateur CodeS-SourceS
As tu fais comme dans mon exemple, c'est à dire récupérer la struct par valeur et remplacer le tableau "ts" par un tableau inline de byte ( ou sbyte ) ?


Cette discussion est classée dans : fonction, code, int, double, in


Répondre à ce message

Sujets en rapport avec ce message

Calcul de temps [ par TheGo ] Salut ..Voila j'ai une fonction qui doit afficher le temps restant avant l'execution d'une action .Ma fonction arrive a afficher les secondes restante probléme avec les tableaux [ par don1 ] salut le forum. J'ai développé un usercontrol et maintenant lors de l'utilisation d'une des fonction de ce composants dans mon application j'ai le mes fonction d'affichage ASP > c# [ par zeb13 ] Vous allez trouver ma question con mais je n'ai pas trouvé une seule réponse à comment implémenter à partir du code behind par exemple un tableau préd permutation ,convertion double en int [ par spmsbl ] Bonjour Je dois trier un tableau 'double' a l'aide d'une méthode de permutation.J'ai toujours le message d'erreur impossible de convertir type doubl Trier plusieur tableau [ par spmsbl ] Bonjour je dois trier plusieur tableau a partir d'un seul. Exemple j'ai un tableau int , un tableau double et un char, je dois les trier par ordre c Fonction retournant un type générique [ par jamesbidon ] Voila je cherche a faire une méthode qui prend a la fois un type générique comme paramètre et qui retourne également un type générique . Ex : [code= Somme d une listbox [ par drime86 ] Bonjour à tous, voila mon problem , j'aimerai  calculer  la somme de la colonne  d' une  listbox  ma fonction :private <font ASP.Net C# Comment appeler ma fonction dans mon code-behind à la perte du focus d'une TextBox ? [ par angedejupiter ] Bonjour à tous, Dans ma page, j'ai une textbox et je dois appeler une fonction que j'ai déjà créé dans mon code behind (pour remplir une DropDownList double click dans une datagrid [ par titi66 ] je souhaite que lorsque l'utilisateur double click sur un datagrid une action se déclenche.j'ai donc mis du code dans l'evenement doubleclick de ma gr Passage de paramaitres ! Où est m'a faute ? [ par bip98 ] Form1 Code :public struct f_axe { public int v_axe_X; public int v_axe_Y; public int v_ID; } public f_axe[] axe_point = new f_axe[1000]; Par exe


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales