Bonjour,

J'ai une librairie écrire en C avec la fonction :
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 variable secur est remplit de caractére et je le convertit en unicode : C'est bon ! Rien à dire !
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 :

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;
 
        }
....
...
}
La méthode C# Readln que j'ai définit appelle ma librairie écrite en C ,
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à ;