IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 1.1] Caractère null dans une DLL non-managée


Sujet :

C#

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [C# 1.1] Caractère null dans une DLL non-managée
    Bonjour à vous,

    Je développe sous C# 1.1.

    Voici mon problème :
    J'ai une DLL non managée programmée en C dont je n'ai pas le code source. J'ai reçu avec cette DLL une liste de toutes les fonctions disponibles dans cette DLL.
    Grâce à cette liste, je peux effectuer un DLLimport d'une des fonctions disponibles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [DllImport("NomDll.dll")]
    private static extern UInt16 Fonction(
    	ref IntPtr Var1,
    	ref IntPtr Var2,
    	[MarshalAs(UnmanagedType.LPStr)] ref string sCommand,
    	[MarshalAs(UnmanagedType.LPTStr)] out string Var4,
    	out UInt16 Var5);
     
    string sCommand = "Exemple" + Chr(0) + "Bonjour";
     
    nReturn = Fonction(ref var1,ref var2, ref sCommand, out var4,out var5);
    J'ai debuggué et après avoir exécuté la fonction, en retour de sCommand, j'ai : "Exemple".

    J'ai effectué des recherches sur le fait que le [MarshalAs(UnmanagedType.LPStr)] a, comme caractère par défaut, le null pour terminer une chaîne et le chr(0) est un caractère null.

    Comment faire passer ce caractère null ? (En changeant le marshal ? mais par lequel ?)

    J'ai effectué des tests en mettant la fonction dans une DLL visual basic 6 en l'appelant du .NET et cela fonctionne parfaitement car j'ai comme valeur de retour pour sCommand la valeur de départ ("Exemple\0Bonjour").

    Avez-vous une solution ?

    D'avance, merci.

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Je comprend pas bien ce que tu veux faire ni ce que tu entends pas "passer" le caractère nul (en français y'a environ trois interprétations possibles de ta phrase).

    Mais simplement, pourquoi tu ne remplacerais pas ton caractère 0 par un espace ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    J'ai trouvé la solution en faite, la DLL est en ANSI et le .NET en Unicode et c'est pour cela que ça ne passait pas.

    Donc j'ai forcé le dllimport en charset.ansi et en mettant le string en[MarshalAs(UnmanagedType.ANSIBStr)].

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Points : 49
    Points
    49
    Par défaut [C#] Passage de paramètre et NULL
    ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/07/2011, 18h42
  2. Réponses: 5
    Dernier message: 04/03/2009, 16h07
  3. Réponses: 5
    Dernier message: 14/01/2008, 16h39
  4. Réponses: 12
    Dernier message: 30/01/2006, 21h13
  5. Creation d'un message dans une dll non MFC
    Par dug dans le forum Windows
    Réponses: 1
    Dernier message: 29/11/2005, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo