Prob chargement dll/conversion de type cpp/c#

davtemp Messages postés 1 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 19 mars 2004 - 19 mars 2004 à 15:22
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 - 22 mars 2004 à 08:25
bonjour,

J'ai un programme en cpp 6.0 qui charge une dll compilée aussi en cpp 6.0. Mon programme fonctionne bien et j'en suis bien content, sauf que là je dois le passer en c# :'(
et là, c'est le début des ennuis, je n'arrive pas à faire passer la dll cpp dans le prog c#, plus précisément la fonction "createSc".
Voici comment j'importe la fonction de la dll qui m'intéresse en cpp (ça marche) :
VIRT_DLL_API int __stdcall createSc(long nbWaLe, float * waLes);

voici comment je l'importe en c# :
[DllImport("virt_dll.dll", EntryPoint="createSc", ExactSpelling=false, SetLastError=true)]
unsafe public static extern int createSc(long nbWaLe, float[] waLes);

et son appel en c#:
int pSc;
long nbw = 80;
float[] wl=new float[nbw];
//initialisation du tab de floats
for (int i = 0; i < nbw; i++) wl[i]=(float)(380+i*(780-380)/(nbw-1));
//appel
pSc = createSc(nbw, wl);
// -> et là boum...exception !!

J'ai essayé plusieurs autres méthodes d'appel en c# et rien ne semble fonctionner. d'ailleurs l'exemple ci dessus me renvoie une belle exception :
"Une exception non gérée du type 'System.NullReferenceException' s'est produite dans davMDI.exe"

Donc ma question serait, comment faire pour faire fonctionner cette fonction de ma dll cpp dans mon prog c# !!
J'ai passé des jours à essayé de bidouillé avec la marshalisation, mais je n'ai pas réussi à envoyer correctement le paramètre float*...... d'où le code "unsafe"
J'en dors presque plus, donc merci d'avance à tous ceux qui pourraient m'apporter de l'aide.

Dav's.

1 réponse

cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
22 mars 2004 à 08:25
[DllImport("virt_dll.dll", EntryPoint="createSc", ExactSpelling=false, SetLastError=true)]
public static extern int createSc(long nbWaLe, ref float[] waLes);

pSc = createSc(nbw, ref wl);

As-tu essayé comme ca ?

A++

:-p Crazyht :)

[Admin Codes-Sources]
[Membre Developer-Association]

Un programmeur, c'est quelqu'un qui résout pour toi, de façon incompréhensible, un problème que tu ignorais avoir...
0
Rejoignez-nous