C# 코드에서 C 공유 라이브러리(DLL)의 함수를 호출하는 것은 상호 운용성을 위해 필요한 경우가 많습니다. 그러나 C 함수가 전용 멤버 변수를 활용하는 클래스에 속하는 경우 C# 코드에서 해당 클래스의 인스턴스를 직접 생성하는 것은 불가능합니다.
간접 P/Invoke를 사용한 해결 방법
해법은 간접적인 P/Invoke 접근 방식에 있습니다. 여기에는 클래스의 멤버 함수를 호출하는 C 클래스 외부의 비멤버 함수 생성이 포함됩니다.
비멤버 함수 생성
C 클래스의 각 멤버 함수에 대해, 멤버 함수를 호출하는 외부 "C" 함수를 만듭니다. 이를 통해 비공개 멤버 변수에 간접적으로 액세스할 수 있습니다.
C#에서 래퍼 클래스 만들기
이러한 비멤버 함수가 C DLL에 정의되면 다음을 수행할 수 있습니다. C#에서 래퍼 클래스를 만들어 상호 작용합니다. 이 래퍼 클래스는 두 플랫폼 간에 전달되는 어색한 IntPtr을 관리하고 보다 유용한 인터페이스를 제공합니다.
래퍼 클래스 함수 P/Invoke
C# 래퍼 클래스 내 , C DLL에서 생성된 비멤버 함수를 P/Invoke할 수 있습니다. 이러한 함수는 차례로 적절한 멤버 함수를 호출하여 C 클래스 기능에 대한 액세스 권한을 부여합니다.
제한 사항 및 권장 사항
이 접근 방식의 단점은 다음과 같습니다. IntPtr을 관리하는 것은 번거로울 수 있습니다. 유용성을 높이려면 C 클래스의 기능을 미러링하는 C# 인터페이스를 만드는 것이 좋습니다. 함수 호출을 P/Invoke 함수에 위임하는 래퍼 클래스에서 C# 인터페이스를 구현합니다. 이 접근 방식을 사용하면 IntPtr을 수동으로 관리할 필요가 없으며 더욱 깔끔한 프로그래밍 모델이 제공됩니다.
대체 옵션
원본 C 코드에 액세스할 수 없는 경우 원본 DLL을 래핑하고 P/Invoke 레이어를 제공하는 새 DLL입니다. 이를 통해 원본 DLL의 구현을 수정하지 않고도 C 클래스에 간접적으로 액세스할 수 있습니다.
위 내용은 전용 멤버 변수가 포함된 경우 C# 코드에서 C 클래스에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!