Dll vc++ [Résolu]

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

Votre réponse

11 réponses

Meilleure réponse
Liverion
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Dernière intervention
18 août 2008
- 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é 86 internautes ce mois-ci

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

merci beaucoup,ça marche.

Bonne journée
Commenter la réponse de amel227
amel227
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Dernière intervention
12 août 2009
- 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
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 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
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Dernière intervention
12 août 2009
- 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
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Dernière intervention
12 août 2009
- 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
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 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
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Dernière intervention
12 août 2009
- 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
Messages postés
19
Date d'inscription
jeudi 10 mai 2007
Dernière intervention
12 août 2009
- 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
Messages postés
1
Date d'inscription
lundi 2 octobre 2006
Dernière intervention
2 février 2009
- 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.