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"
//déclaration C++ :
int PrinterSendFileTo(TCHAR* printerName, TCHAR* filePath)
Je fais donc cette déclaration :
[DllImport("DMIPrintMonitor.dll",CharSet=CharSet.Unicode)]
static extern int PrinterSendFileTo(StringBuilder printerName, StringBuilder filePath);
et l'appel :
int rep=PrinterSendFileTo(new StringBuilder("EPSONC82"),new StringBuilder(openFileDialog1.FileName));
Tu nous aide pas beaucoup : "Ca ne fonctionne pas" c'est quand même très vague, utilise un try/catch. As tu une exception ? Quel est le message de l'exception ? Le programme trouve t'il la dll ? T'es sûr que c'est le marshalling qui ne marche pas ou c'est ta fonction PrinterSendFileTo ?
StringBuilder c'est utile si tu dois récupérer la chaine modifiée mais la tu peux pas la récupérer tu as pas maintenue de référence.
La fonction "PrinterSendFileTo" de la dll fonctionne puisque je fait la même chose avec un prog DELPHI.
Les valeurs des chaines sont des constantes non modifiées, donc StringBuilder ne sert à rien ?
Je vais modif programme pour récupérer l'exception si il en a une.
(désolé je débute et ma capacité à écrire rapidemment en C# est limité)
En fait ca fonctionne avec
[DllImport("DMIPrintMonitor.dll",CharSet=CharSet.Unicode)]
static extern int PrinterSendFileTo(String printerName, String filePath);
et
PrinterSendFileTo( "EPSONC82", filename );
J'avais fait une connerie, sorry et merci pour ton aide.