Vous apprendre étape par étape comment utiliser les pointeurs en C#
C# est un langage interprété dans lequel les pointeurs sont encapsulés, donc les utilisateurs Le pointeur d'un objet ne peut pas être appelé directement. Mais lorsque vous utilisez C# pour appeler une DLL C/C++, il arrive souvent que les paramètres de fonction ou les valeurs de retour soient des pointeurs. Dans ce cas, les pointeurs doivent être manipulés.
Pour utiliser des pointeurs en C#, vous devez d'abord répondre aux questions suivantes :
1 Quels types de pointeurs sont fournis par C# ? C# fournit Le pointeur est un IntPtr ou UIntPtr, un type spécifique à la plate-forme utilisé pour représenter un pointeur ou un handle. Par conséquent, IntPtr peut être utilisé pour représenter des pointeurs ou des handles et est un type spécifique à la plate-forme.
1.1 Où IntPtr est-il utilisé ?
(1) Lorsque C# appelle l'API WIN32
(2) Lorsque C# appelle une DLL écrite en C/C++ (En fait, c'est la même chose que 1, mais ceci est généralement utilisé lorsque nous coopérons avec d'autres pour développer)1.2 Comment utiliser IntPtr
Par exemple, il existe un prototype de fonction défini comme :
DllDemoAPI DLLGen* DLLGen_Create(HWND hWnd);
[DllImport("DLLGen.dll", EntryPoint = "DLLGen_Create", CallingConvention = CallingConvention.Cdecl)] public extern static IntPtr DLLGen_Create(IntPtr hWnd);
2. Quelle est la différence entre géré et non géré ?
Le mécanisme d'allocation et de recyclage automatique de l'espace d'allocation de mémoire en C# est implémenté à l'aide de la mémoire gérée. appelée mémoire gérée La mémoire est l'endroit où le programme est responsable de l'allocation de la mémoire du pointeur et de la détermination si le pointeur doit être libéré en comptant le nombre de références au pointeur.
Non géré fait référence à l'allocation de mémoire de pointeur à une zone de mémoire non gérée. Les pointeurs alloués ici doivent allouer de la mémoire par eux-mêmes et recycler la mémoire par eux-mêmes.3. Comment utiliser des pointeurs comme en C/C++
En C#, vous pouvez utiliser des instructions non sécurisées pour faire fonctionner des pointeurs. Par exemple,
unsafe { int *ptr = new int[100]; for (int i = 0; i < 100; i++) { *(ptr+i) = i; } delete[] ptr; }
Langage C
"Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!