begin process at 2012 02 10 21:46:10
  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 Dll et Pointeurs de fonctions [ par phantom_2005 ] Bonjour à tous, j'ai un problème concernant l'appel d'une fonction dans une dll. Cette fonction prend comme argument un pointeur vers une fonction. PaintEventArgs [ par orfanik ] Je souhaite toujours dessiner un rectangle parceque c'est beau, jolie, esthetique et agréable à regarder. J'ai cherché dans la documentation MSDN et j Rafraichir Datagridview en utilisant une fonction [ par spameur_tn1 ] Salut tout le monde. En fait j'ai créé une fonction en vb.net qui fait l'actualisation d'une datagridview (ah en + ma base de données est SQL server), EventHandler pour la fonction Click [ par ketaaa ] Bonjour a tous , je vous expose mon problème , je cree un bouton j'essaie de lui assigner un eventHandler et quand j'éxécute pof erreur! "Erreur 1 Auc equation logistique et structure fractale [ par foufouange ] bon soir je suis entrain de réaliser une application sur la structure fractale des poumons par l'équation logistique.J'espère que vous m'aider à réal Decimal, float, double... en C# avec SQL Server [ par 0nn2belle ] Bonsoir tout le monde, Je suis débutante en c# et je suis confrontée à un problème que j'ai déjà rencontré, mais... en JAVA ! Et je suis perdue dans m Ecriture de double quotes [ par Spawn3107 ] Bonjour tout le monde, j'essaie d'écrire une chaine de caractère : [code=cs]select * FROM REMAINING_PIECES WHERE CREATION_DATE < dateadd("yyyy",-1,C Imprimer avec USBLib - Problème avec CreateFile [ par Potus ] Bonjour, On m'a demandé d'imprimer directement sur des petites imprimantes connectés avec un cable USB. Je suis donc parti de l'USBLib qui me perme


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 7,862 sec (3)

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