요약 :복잡의 PInvoke 상황 - 함수 오버로딩을 피하기
내가 C 번호에서 전화가 C 함수의 무리가 있습니다. 내 현재 작업 솔루션은 함수 오버로딩을 기반으로하고 더 우아한 솔루션이 있는지 궁금하네요.
ㄴ 재료 :
어딘가에 헤더 파일typedef struct _unknown_stuff * handle; // a opaque pointer
함수 C에서
func(uint num_entries,
handle * objects,
uint * n)
{ ... }
예에서
기능이 유사한 표기 :
// warning: i bet that the syntax is not correct but you should get the idea...
uint n;
func(0, null, &n);
handle * objects = malloc(n * sizeof(handle));
func(n, objects, null);
는 C# 물건 : 오른쪽
지금은 C#으로 다음과 같은 일을 해요 : 다음
public struct handle
{
public IntPtr Pointer;
}
// version to get number of objects
[DllImport(dll, ...]
private static extern void
func( uint must_be_zero,
object must_be_null,
out uint n);
// version to get the actual data
[DllImport(dll, ...]
private static extern void
func( uint num_entries,
[Out] handle[] objects,
int must_be_zero);
과 :
handle[] objects;
uint n = 42;
func(0, null, out n);
objects = new handle[n];
func(n, objects, 0);
[질문
이후 저는 C# 멍청한 놈입니다. 이것이 최선의 방법인지 궁금 해서요. 이 작업을 수행. 특히 함수 오버로딩에 대한 방법이 있는지 알고 싶습니다.
좋아, 이제 좀 당황 스럽다. C#이 포인터를 지원한다는 것을 몰랐다. 포인터를 사용하면 힌트를 주셔서 감사합니다 :) 도서관에서 벗어나 C# 서적을 찾으십시오. –