【发布时间】:2013-08-01 17:46:47
【问题描述】:
我正在包装一个包含数百个函数的本机库,在所有这些函数之上键入 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();
【问题讨论】:
-
Ctrl+C、Ctrl+V。在 C# 中没有办法,但是您可以在托管 C++ 中编写包装器并直接使用 DLL 头文件。这就是托管 C++ 的用途。
-
谢谢,但我想在 mono/linux 下使用这个包装器,所以 C++/CLI 不是一个选项。
标签: c# macros c-preprocessor pinvoke