【问题标题】:Shorten amount of DllImport in C#?在 C# 中缩短 DllImport 的数量?
【发布时间】:2013-02-26 01:07:19
【问题描述】:

这是我的 C# 代码示例。有没有办法减少 DllImport 属性的数量?

namespace CSLib
{
    class Program
    {
        static void Main(string[] args)
        {
            CLib.test();
            CLib.test2(3);
            A a = new A() { a = 9, b = 5 };
            CLib.test3(ref a);
        }
    }
    class CLib
    {
        [DllImport("path/to/CDLL", CallingConvention = CallingConvention.Cdecl)]
        public static extern void test();

        [DllImport("path/to/CDLL", CallingConvention = CallingConvention.Cdecl)]
        public static extern void test2(int a);

        [DllImport("path/to/CDLL", CallingConvention = CallingConvention.Cdecl)]
        public static extern void test3(ref A a);
    }

    [StructLayout(LayoutKind.Sequential)]
    struct A
    {
        [MarshalAs(UnmanagedType.I4)]
        public int a, b;
    }
}

【问题讨论】:

  • 你可以导入 LoadLibraryGetProcAddress 并动态加载你的导入......
  • @Blorgbeard:我有点困惑。不会是一样多的代码吗?
  • 是的,少了一个[DllImport]..也许我有点太字面意思了
  • @Blorgbeard:我希望我可以做一些事情,比如将导入放在类上并假设名称。但是所有这些代码都会生成,所以我不介意。但是会有 500 多个函数和 200 多个结构,所以它可能会变得非常大
  • -1:标题似乎完全是任意应用的(即不是真正的问题)

标签: c# .net dllimport interopservices


【解决方案1】:

要么将方法公开为 COM 方法,要么围绕它们创建 C++/CLI 包装器。

【讨论】:

  • 这并没有真正降低复杂性,它只是将其从调用者转移到 DLL 中。
  • 如果您使用 ATL 创建 COM 服务器,大部分代码都是为您生成的,您只需编写相当于 DLL 导出方法的代码。但是不需要像 DllImport 那样编写编组指令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多