begin process at 2010 02 10 03:51:43
  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 Retour d une DLL [ par ZaRMaS ] Salut a tous, J ai un petit probleme avec ma dll code en C. Elle retourne un char * et je cherche a recuperer en csharp le retour de cette fonction. V 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")]    Apeller des fonctions C++ (via une dll) depuis C# [ par jmengelle ] Bonjour, bien que je ne sois pas du tout expérimenté dans ces langages, on m'a demandé depuis une application C# d'apeller des fonction C++ qui seront


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 0,640 sec (4)

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