begin process at 2012 02 09 10:56:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

Importer une DLL C dans un prog C#


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Importer une DLL C dans un prog C#

jeudi 1 décembre 2005 à 16:51:02 | Importer une DLL C dans un prog C#

ybuchheit

Bonjour, Je dois utiliser des fonctions d'une dll écrite en C. J'ai uniquement les prototypes des fonctions, je n'ai pas accès aux sources. Voici mes prototypes: int funcA() int funcB(char* param1, long param2) la fonction B prend en paramètre un pointeur...J'ai donc créer un prog en cs utilisant les fonctions en les redéclarant dans une classe Wrap de cette manière: [DllImport("C:\\madll.dll", CharSet=CharSet.Ansi)] public static extern int funcA(); [DllImport("C:\\madll.dll", CharSet=CharSet.Ansi)] public static extern int funcB( [MarshalAs(UnmanagedType.LPStr)] string param1, long param2); J'appele mes fonctions de cette manière: iRetour=Wrap.funcA(); string sChaineTraite=""; iRetour=Wrap.funcB( sChaineTraite + '\0', 10); L'appel de la fonction A marche à chaque fois, par contre la fonction B ne marche que si je mets une chaîne vide, sans caractère. Je pense donc qu'il y a un problème pour transformer le string en char*. Quelqu'un aurait il une idée?
jeudi 1 décembre 2005 à 17:46:50 | Re : Importer une DLL C dans un prog C#

Lutinore

Administrateur CodeS-SourceS
Salut, n'oublie pas que les instances du type String sont immuables, utilises StringBuilder si la fonction doit modifier la chaine.
vendredi 2 décembre 2005 à 05:38:37 | Re : Importer une DLL C dans un prog C#

LUDINSKI

Salut ybuchheit,

Essayes voir d'importer ta méthode de cette façon :

DllImport( "C:\\madll.dll" )]
public static extern int funcB(
[MarshalAs( UnmanagedType.LPTStr )]
string param1, long param2 );

Si tu est sous Windows NT ou Windows XP, il faut encoder les chaîne en Unicode !
Avec cet attribut, c'est géré automatiquement...
vendredi 2 décembre 2005 à 09:50:39 | Re : Importer une DLL C dans un prog C#

ybuchheit

Merci pour vos réponses. Pour LPTStr çà ne marche pas non plus. Pour le StringBuilder, je n'arrive pas à l'utiliser, le compilateur me met " Le type ou le nom d'espace de noms 'StringBuilder' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)". Mes using sont actuellement "System;" et "System.Runtime.InteropServices;"
vendredi 2 décembre 2005 à 09:52:43 | Re : Importer une DLL C dans un prog C#

MorpionMx

Membre Club Administrateur CodeS-SourceS
Ajoute la dierctive
using System.Text;


Mx
lundi 5 décembre 2005 à 08:40:01 | Re : Importer une DLL C dans un prog C#

ybuchheit

Merci, j'ai essayé avec un StringBuilder mais çà ne marche toujours pas
jeudi 8 décembre 2005 à 04:42:37 | Re : Importer une DLL C dans un prog C#

Lutinore

Administrateur CodeS-SourceS
[ DllImport( "C:\\madll.dll", CharSet = CharSet.Ansi ) ]
public static extern int funcB(  [ MarshalAs( UnmanagedType.LPStr ) ] string param1, long param2 );

Déja le long en C/C++ est un Int32 en C#.

iRetour=Wrap.funcB( sChaineTraite + '\0', 10);

On ne s'occupe pas du caractère nul '\0' en C# ( sauf cas particuliers.. ), réessaye avec le StringBuilder et le Int32 et sans ce caractère nul.

Au pire marque ton prototype unsafe ( compile en mode unsafe aussi ) et remplace ta chaine par un pointeur, de type byte* pour une chaine Ansi et char* pour une chaine Unicode. Tu peux fixer ( instruction fixed ) un tableau en mémoire pour passer son pointeur.


Cette discussion est classée dans : int, dll, prog, fonctions, charset


Répondre à ce message

Sujets en rapport avec ce message

Dll c++ utilisée en C# [ par Florenzau ] Bonjour à tous, Je dois utiliser une Dll réalisée en C++ sur un programme en C#. J'arrive à utiliser des fonctions simples telles que : c++ : void Pb pour Importer une dll ecrite en C dans un prog C# [ par gilch ] Bonjour, j'ai utilisé avec succes une dll ecrit en c dans un prog en delphi. Aujourd'hui j'essay la meme operation (meme dll) mais dans un prog en C# Dll et Pointeurs de fonctions [ par phantom_2005 ] Bonjour à tous, j'ai un problème concernant l'appel d'une fonction dans une dll. Cette fonction prend comme argument un pointeur vers une fonction. dll, arguments non valides lors de l'utilisation [ par moi411 ] Bonjour tout le monde, J'ai créer une dll avec une fonctions de tri (que je nomme dllTri). Je passe en paramètre la liste à trier et je récupère la l Passer un pointeur sur tableau de structure [ par olibara ] BonjourDepuis C# j'aimerais appeller une Dll ecrite en CJ'ai plusieurs fonctions dont certaines utilisent un pointeur sur tableau de structure, commen Utilisation d'une DLL delphi dans du code managé C# [ par Prince Dark ] Bonjour,Je suis actuellement dans le but d'utiliser des fonctions non managées contenues dans une DLL ecrite en delphi dans mon code C#.La DLL est fix Pointeurs... Encore et toujours... [ par darknoon29 ] Nous avons toujours quelques difficultés, voilà ce qu'on a écrit:          [DllImport("ordonantsdll.dll")] public static extern System.IntPtr Lister les fonctions contenu dans une DLL [ par Tuizi ] Bonjour, J'aurais aimer savoir si il y avais un moyen "simple" en C# pour lister les fonctions contenu dans une DLL?MerciTuizi DllImport [ par RMI ] Bonjour,Je dois dois faire le lien entre une dll C++ et C#La fonction    [DllImport(DLL_NAME, CharSet = CharSet.Ansi, EntryPoint = "MvaSensorNew")]   


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,540 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales