DLL无法在python中加载

时间:2015-09-16 09:02:13

标签: c# python

所以我按照这个问题中发布的解决方案

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

1 个答案:

答案 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)