Bonjour,
J'ai une librairie écrire en C avec la fonction :
La variable secur est remplit de caractére et je le convertit en unicode : C'est bon ! Rien à dire !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 bool _stdcall HAS_V1_VEC_ReadLn(HWND hWnd,wchar_t *s,int lim,DWORD flag) { char secur[lsecur]={0}; bool b= VEC_ReadLn(hWnd,secur,min(lsecur,lim),flag); //pour debugger le c# //MessageBox(hWnd,secur,"DEBUG",MB_SYSTEMMODAL); // ansi2unicode(secur,s); return b; }
La fonction VEC_Readln Fonctionne ! OK, il remplit la variable secur qui contient la chaine saisie ; bref ;
En C# , dans mon application , je recupére bien la chaine en sortie :
La méthode C# Readln que j'ai définit appelle ma librairie écrite en C ,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 [DllImport("has_x64.dll", CharSet = CharSet.Unicode)] unsafe internal static extern bool HAS_V1_VEC_ReadLn(IntPtr hWnd, String s, uint lim, uint flag); ..... ..... class XXXXX : public UserControl ... .. public String Readln() { String r=""; Focus(); HAS_V1_VEC_ReadLn(this.Handle, r, 256, 1); return r; } .... ... }
CA fonctionne ;
Mais est - ce conforme pour le retour de la chaine "String" depuis ma librairie ecrire en C ?
Sinon comment le faire en conformité ?
Quand la chaine est trop longue , j'ai un plantage quand je sors de mon application C#.
Voilà ;
Partager