C#에서 포인터 사용법을 단계별로 가르쳐주세요
C#은 포인터가 캡슐화되어 있는 해석 언어이므로 사용자가 개체의 포인터를 직접 호출할 수 없습니다. 하지만 C#을 사용하여 C/C++ DLL을 호출할 때 함수 매개변수나 반환 값이 포인터인 경우가 종종 있습니다. 이 경우 포인터를 조작해야 합니다.
C#에서 포인터를 사용하려면 먼저 다음 질문에 답해야 합니다.
1. C#에서는 어떤 유형의 포인터를 제공합니까? 따라서 IntPtr은 포인터나 핸들을 나타내는 데 사용할 수 있으며 플랫폼별 형식입니다.
1.1 IntPtr은 어디에 사용되나요? (1) C#에서 WIN32 API를 호출할 때
(2) C#에서 C/C++로 작성된 DLL을 호출할 때(실제로는 1과 같지만, 보통 다른 사람들과 협력하여 개발합니다.) ) 자주 사용됨)
1.2 IntPtr 사용 방법예를 들어 다음과 같이 정의된 함수 프로토타입이 있습니다.
DllDemoAPI DLLGen* DLLGen_Create(HWND hWnd);
그러면 C#에서 이를 인용할 때 다음과 같이 작성해야 합니다. [DllImport("DLLGen.dll", EntryPoint = "DLLGen_Create", CallingConvention = CallingConvention.Cdecl)]
public extern static IntPtr DLLGen_Create(IntPtr hWnd);
(1) void *는 IntPtr로 직접 변환될 수 있습니다.
(2) char *는 C#의 문자열 유형에 해당합니다.
2. 관리형과 비관리형의 차이점은 무엇인가요?C#에서 메모리 할당 공간의 자동 할당 및 재활용 메커니즘은 관리형 메모리를 사용하여 구현됩니다. 포인터를 해제해야 하는지 여부를 결정하기 위해 포인터에 대한 참조 수를 계산합니다.
Unmanaged는 관리되지 않는 메모리 영역에 포인터 메모리를 할당하는 것을 말합니다. 여기에 할당된 포인터는 스스로 메모리를 할당하고 메모리를 재활용해야 합니다.
3. C/C++에서와 같이 포인터를 사용하는 방법C#에서는 unsafe 선언을 사용하여 포인터를 작동할 수 있습니다. 예를 들어
unsafe { int *ptr = new int[100]; for (int i = 0; i < 100; i++) { *(ptr+i) = i; } delete[] ptr; }
unsafe 모듈에서는 포인터를 c/C++ 방식으로 사용할 수 있습니다. 참고: 안전하지 않은 모듈을 사용하는 경우 C# 프로젝트 속성에서 "안전하지 않은 모듈 사용 허용" 옵션을 선택하세요.
읽어주신 모든 분들께 감사드리며, 많은 혜택 받으시길 바랍니다.
이 기사는 https://blog.csdn.net/menjiawan/article/details/48677455
추천 튜토리얼: "
C Language"
에서 복제되었습니다.위 내용은 C#에서 포인터를 사용하는 방법을 단계별로 가르칩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!