在 dotnet 核心中使用带有本机代码的动态库(使用框架 v4.0 构建)

Using dynamic library with native code(build with framework v4.0) in dotnet core

我已经使用 dotnet framework v4.0 构建了一个 dll 构建。库中的代码如下

`extern "C"  
 {
      __declspec(dllexport) int add(int a,int b) 
      {
          printf("Unmanaged add()");
          return a+b;
      }
      __declspec(dllexport) int subtract(int a,int b) 
      {
          printf("Unmanaged subtract()");
          return a-b;
      }
}`

现在我需要在 .Net Core Application 中引用这个 dll。为此,我制作了包含此 dll 的 Nuget 包,并最终安装了此 nuget 包。

引用的 dll 在其依赖部分下的 project.json 文件中非常明显。

现在 .Net 核心应用程序 是这样的

{

        [DllImport("vs2010_nativelib.dll", CallingConvention =                                                    CallingConvention.Cdecl)]
        public static extern int subtract(int a, int b);`

        [DllImport("vs2010_nativelib.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern int add(int a, int b);

        public static void Main(string[] args)
        {
            Console.WriteLine("Inside Managed Dot Net Core 1.0 Application ");
            Console.WriteLine("Calling Unamanged add : {0}", add(10, 20));
            Console.WriteLine("Calling Unamanged subtract : {0}", subtract(30, 20));
            Console.ReadLine();
        }
}

虽然 运行 此应用程序在调用非托管 dll 的 add(10, 20) 函数时抛出 BadImageFormatException 并显示此消息 An attempt was made to load a program with an incorrect format.

那么问题出在哪里呢? .Net Core 不能使用这些类型的库还是我还缺少其他东西?

确保本机代码 dll 和 .Net 核心应用程序 dll 的平台与您的机器配置相同(例如:64 位)。