Dll vc++ [Résolu]

amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 30 mai 2008 à 15:23 - Dernière réponse : marouanebj 1 Messages postés lundi 2 octobre 2006Date d'inscription 2 février 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Liverion 296 Messages postés mardi 22 avril 2008Date d'inscription 18 août 2008 Dernière intervention - 30 mai 2008 à 16:28
3
Merci
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 !!!!!!

Merci Liverion 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Liverion
Liverion 296 Messages postés mardi 22 avril 2008Date d'inscription 18 août 2008 Dernière intervention - 30 mai 2008 à 15:51
0
Merci
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 !!!!!!
Commenter la réponse de Liverion
amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 30 mai 2008 à 16:28
0
Merci
Salut

merci beaucoup,ça marche.

Bonne journée
Commenter la réponse de amel227
amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 30 mai 2008 à 16:36
0
Merci
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?
Commenter la réponse de amel227
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 30 mai 2008 à 19:30
0
Merci
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é.
Commenter la réponse de Lutinore
amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 1 juin 2008 à 10:15
0
Merci
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
Commenter la réponse de amel227
amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 3 juin 2008 à 10:16
0
Merci
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
Commenter la réponse de amel227
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 7 juin 2008 à 13:33
0
Merci
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.
Commenter la réponse de Lutinore
amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 9 juin 2008 à 10:30
0
Merci
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
Commenter la réponse de amel227
amel227 19 Messages postés jeudi 10 mai 2007Date d'inscription 12 août 2009 Dernière intervention - 10 juin 2008 à 15:52
0
Merci
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
Commenter la réponse de amel227
marouanebj 1 Messages postés lundi 2 octobre 2006Date d'inscription 2 février 2009 Dernière intervention - 2 févr. 2009 à 13:33
0
Merci
tu dois placer ta DLL dans le répertoire release ou debug. en gros le répertoire ou est créer ton exécutable
Commenter la réponse de marouanebj

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.