所以我按照这个问题中发布的解决方案
Calling a C# library from python
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using RGiesecke.DllExport;
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
Python
import ctypes
a = ctypes.cdll.LoadLibrary('ClassLibrary1.dll')
a.add(3, 5)
错误
AttributeError: function 'add' not found
我所做的是将dll复制到桌面上并在桌面上运行python shell并在python shell中运行以下行。难道我做错了什么?
我正在使用python 2.7
答案 0 :(得分:2)
尝试重现时,得到了相同的行为。但原因很简单 - 很可能你的.NET项目就像我的一样,目标是AnyCPU。由于我们正在尝试创建非托管导出 - 我们需要x86和x64的单独版本。因此,要解决您的问题 - 例如,针对您的.NET程序集定位x86。以下是我发现的方法(此信息也可能有用):在Visual Studio中转到工具>选项>项目和解决方案>构建并运行。在那里,您将看到MSBuild输出详细级别 - 将其设置为Diagnosts。然后构建你的项目以及其他你会看到的东西:
Skipped方法导出,因为平台目标既不是x86也不是x64。设置MsBuild属性' NoDllExportsForAnyCpu'如果要为x86和x64创建单独的版本,则为false。 (例如,你可以在包管理器控制台中执行此操作:Set-NoDllExportsForAnyCpu -value $ false)(TaskId:35)