2013-08-01 4 views
1

나는 수백 가지 기능을 가진 네이티브 라이브러리를 래핑하고 있으며 그 모든 기능보다 위에 DllImport를 입력하는 것은 완전히 짜증나게합니다.C# 전 처리기 매크로 대체

모든 기능 위에 위와 같은 반복적 인 속성을 쓰는 것을 피할 방법이 있습니까?

public const string NativeDll = "mynativelib.dll"; 

[DllImport(NativeDll, CallingConvention = CallingConvention.Cdecl)] 
public static extern void foo1(); 

[DllImport(NativeDll, CallingConvention = CallingConvention.Cdecl)] 
public static extern void foo2(); 

[DllImport(NativeDll, CallingConvention = CallingConvention.Cdecl)] 
public static extern void foo3(); 

[DllImport(NativeDll, CallingConvention = CallingConvention.Cdecl)] 
public static extern void foo4(); 

... 

[DllImport(NativeDll, CallingConvention = CallingConvention.Cdecl)] 
public static extern void fooN(); 
+0

Ctrl + C, Ctrl + V C#에는 방법이 없습니다. 그러나 관리되는 C++로 래퍼를 작성하고 DLL 헤더 파일을 직접 사용할 수 있습니다. 이것이 C++의 관리 대상입니다. – Tergiver

+0

고마워,하지만 모노/리눅스에서이 래퍼를 사용하고 싶다. 그래서 C++/CLI는 옵션이 아니다. –

답변

1

C#을 미리 프로세서를 가지고 있지 않기 때문에 귀하의 질문에 간단한 대답은이 선언을 호출/모든 페이지에 대한 속성을 작성 피할 수없는 것입니다.

이제 이러한 p/invoke 선언을 생성하기 위해 자체 프로세서 또는 스크립트를 작성할 수 있습니다. p/invoke 선언은 한 번만 쓰여지고 유지 보수는 필요 없기 때문에 그럴 가치가 있다고 확신하지는 않습니다.

+0

C#에는 독립 실행 형 전처리 기가 없지만 [하나의 기능] (http://msdn.microsoft.com/en-us/library/ed8yd1ha.aspx)이 있습니다. 하지만 다른 언어와 비교하면 매우 제한적입니다. – jpmc26