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
A voir également:

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