在 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 位)。
我已经使用 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 位)。