1

我正在包装一个包含数百个函数的本机库,在所有这些函数之上键入 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();
4

1 回答 1

1

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

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

于 2013-08-02T08:27:25.090 回答