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++/CLI Discussion :

[C++> C#]Comment régler problème de type TCHAR*/string ?


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 10
    Points
    10
    Par défaut [C++> C#]Comment régler problème de type TCHAR*/string ?
    Je veux appeler une fonction d'une dll écrite en C++ (compilé avec VS .
    net). Mais ca ne fonctionne pas ?
    Je suis débutant en C# et je pense qu'il y a un pb de type entre "TCHAR*" et "string"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //déclaration C++ : 
    int PrinterSendFileTo(TCHAR* printerName, TCHAR* filePath)
     
    //déclaration C# :
    [DllImport("DMIPrintMonitor")]		
    static extern int PrinterSendFileTo(string printerName, string filePath);
     
    //appel C#
    PrinterSendFileTo("EPSONC82",openFileDialog1.FileName);

    Je fais la même chose en delphi, et ca fonctionne :

    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /déclaration delphi :
    function PrinterSendFileTo(printerName: pWideChar;filePath:pWideChar):integer; cdecl; external 'DMIPrintMonitor.dll' name 'PrinterSendFileTo';
     
    //appel delphi 
    PrinterSendFileTo(pWideChar(fPrinterName),pWideChar(FFileName));

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut Re: [C++> C#]Comment régler problème de type TCHAR*/strin
    essai avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    //déclaration C# :
    [DllImport("DMIPrintMonitor",CallingConvention=CallingConvention.Cdecl)]	
    static extern int PrinterSendFileTo(
    [MarshalAs(UnmanagedType.ByValTStr)]
    string printerName, 
    [MarshalAs(UnmanagedType.ByValTStr)]
    string filePath);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Avec cette déclaration, il y a une erreur sur "MarshalAs" à la compilation

    Erreur lors de l'émission de l'attribut 'System.Runtime.InteropServices.MarshalAsAttribute' -- 'SizeConst requis pour une chaîne de taille fixe.'

    Comme je suis débutant en VS.net ca ne me parle pas beaucoup

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    ah zut, j'avais oublié ... en fait ce qui pourrai faire l'érreur c'est que DotNet passe les arguments par défaut en stdcall alors que la c'est cdecl. Donc retire les MarshalAs mais laisse tout le reste et test

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Ca ne fonctionne pas non plus en enlevant MarshalAs

    On m'a donné la solution sur un autre forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //déclaration
    [DllImport("DMIPrintMonitor.dll",CharSet=CharSet.Unicode)]		
    static extern int PrinterSendFileTo(String printerName, String filePath);
     
    //appel
    int jobID=PrinterSendFileTo(PrinterNameTextBox.Text,openFileDialog1.FileName);

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    par hasard avec CharSet=CharSet.Auto ça marche ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    oui ca fonctionne avec charset.Auto

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

Discussions similaires

  1. Comment régler ce problème avec PWideChar ?
    Par [ZiP] dans le forum Débuter
    Réponses: 2
    Dernier message: 08/03/2011, 10h58
  2. Comment régler le problème de transaction log plein ?
    Par orafrance dans le forum MS SQL Server
    Réponses: 33
    Dernier message: 23/07/2010, 11h01
  3. Comment régler la hauteur d'un type text?
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 15/08/2005, 21h38
  4. Comment Enregistrer un champ type BLOB avec Query ???
    Par baba dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2005, 20h33
  5. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04

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