我正在使用数百个函数包装一个本地库,并且在所有这些函数之上键入DllImport非常烦人。
有没有办法避免在每个函数上面写出这些丑陋/重复的属性?
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 :(得分:1)
C#没有预处理器,因此对您的问题的简单回答是,不可能避免为每个p / invoke声明编写属性。
现在,您可以编写自己的预处理器或脚本来生成这些p / invoke声明。我不相信这是值得的,因为p / invoke声明往往只写一次并且不需要维护。