C#预处理器宏替代

时间:2013-08-01 17:46:48

标签: c# macros c-preprocessor pinvoke

我正在使用数百个函数包装一个本地库,并且在所有这些函数之上键入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();

1 个答案:

答案 0 :(得分:1)

C#没有预处理器,因此对您的问题的简单回答是,不可能避免为每个p / invoke声明编写属性。

现在,您可以编写自己的预处理器或脚本来生成这些p / invoke声明。我不相信这是值得的,因为p / invoke声明往往只写一次并且不需要维护。