Dll vc++

Résolu
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009 - 30 mai 2008 à 15:23
marouanebj Messages postés 1 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 2 février 2009 - 2 févr. 2009 à 13:33
Bonjour à tous

j'ai une dll en vc++,quand j'utilise l'une de ses fonctions en c# une exception se lance à la compilation à cause de la non comptabilité entre les types de variables en vc++ et c#.
Ma fonction retourne un tableau de double,je sais pas à qoi correspond un tableau de double en c#.
Si vous avez un idée, s'il vous plait m'aider.

Merci

bonne journée

11 réponses

Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
30 mai 2008 à 16:28
Pas de souci ^^
Pense a la regle 2 :p

Les trois lois de Codes-Sources :
1) Tu lis et respecte le reglement
2) Tu pense a valider si une reponse apportée a ton probleme t'a aidé
3) Si tu ne respecte pas les 2 premières .......................... TU SORS !!!!!!
3
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
30 mai 2008 à 15:51
Pour avoir un tableau de Double tu peux passer par une List<Double> qui est une collection generique ( il faut donc ajouter using System.Collections.Generic; )

Les trois lois de Codes-Sources :
1) Tu lis et respecte le reglement
2) Tu pense a valider si une reponse apportée a ton probleme t'a aidé
3) Si tu ne respecte pas les 2 premières .......................... TU SORS !!!!!!
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
30 mai 2008 à 16:28
Salut

merci beaucoup,ça marche.

Bonne journée
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
30 mai 2008 à 16:36
A l'exécution j'ai ce genre d'exceptio:MarshalDirectiveException was unhandled
"Cannot marshal 'return value': Generic types cannot be marshaled."
ceci dans la ligne de commande quand j'appelle la fonction de ma dll vc++

Vous avez une idée sur ce genre d'exception?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
30 mai 2008 à 19:30
Salut, tu utilises l'attribut DllImport pour appeller une fonction de ta dll, c'est bien ça  ? Dans ce cas c'est impossible de marshaller le tableau dans une liste générique, le tableau renvoyé est un pointeur, il faut utiliser le type C# IntPtr puis utiliser Marshal.Copy ou le code unsafe pour récupéré les valeurs du tableau. Il faut aussi détruire le tableau une fois que tu as terminé.
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
1 juin 2008 à 10:15
Bonjour

      Merci pour votre réponse, je demande si vous pouvez m'expliquer plus comment faire.
      J'ai le code suivant :

        [DllImport("CalDes.dll")]
        public static extern double* calculHist(string path);
       
          IntPtr ptr = calculHist(path);
          double* hist = (double*)ptr;

          Mais j'ai ce genre d'erreur: "Pointers and fixed size buffers may only be used in an unsafe context"
          C'est quoi le problème?

  Bonne journée
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
3 juin 2008 à 10:16
Bonjour à tous

S'i vous plaît, je cherche encore une solution pour le problème mentionné juste au dessus de ce message.
Prière de m'aider.

Bonne journée

Mes remerciements
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
7 juin 2008 à 13:33
dsl j'avais pas vu ta question.

Pour utiliser les pointeurs il faut 2 choses :

- 1 ) définir un bloc unsafe

unsafe
{
   // ...
}

ou marquer la fonction avec le mot clé unsafe.

private unsafe void DoSomething( ) { .. }

2 ) Dans les paramètres du projet cocher la case "Autoriser le code unsafe" ou l'option -unsafe pour le compilo en ligne de commande.
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
9 juin 2008 à 10:30
Bonjour

J'ai mis en place le code correspondant pour l'appel de dll, tout ça marche sauf en exécution j'ai cette exception:

DllNotFoundException was unhandled
Unable to load DLL 'SiftGPU.dll': Le module spécifié est introuvable. (Exception from HRESULT: 0x8007007E)

même si j'ai mis cette dll dans le dossier de mon projet, j'ai cette exception.

Prière de m'aider le plus vite que possible.

Merci infinement
0
amel227 Messages postés 19 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 12 août 2009
10 juin 2008 à 15:52
Bonjour

J'ai le code suivant

[DllImport(@"C:\Documents and Settings\Espoir\Bureau\Essai\Offline\bin\Debug\SIFTGPU.dll", EntryPoint = "calculHist")
public static extern IntPtr calculHist(string path);
double[] hist = new double[64];
IntPtr ptr = calculHist(path);
Marshal.Copy(ptr, hist, 0, 64);

Quand j'execute j'ai l'exeception suivante

DllNotFoundException was unhandled
Unable to load DLL 'SiftGPU.dll': Le module spécifié est introuvable. (Exception from HRESULT: 0x8007007E)

Avez vous une idée sur ça

Prière de m'aider

Merci d'avance
0
marouanebj Messages postés 1 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 2 février 2009
2 févr. 2009 à 13:33
tu dois placer ta DLL dans le répertoire release ou debug. en gros le répertoire ou est créer ton exécutable
0
Rejoignez-nous