加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何将C#dll导入python

发布时间:2020-12-16 06:50:20 所属栏目:百科 来源:网络整理
导读:我有一个第三方c#dll,它是在dot net 4.5中创建的,其平台目标是x86.我想把它导入到 python脚本中,我从Rob Deary的答案 here开始.但是我无法让他的例子起作用.我正在使用python版本2.7.6,我得到一个AttributeError,如下所示. File "C:Python27Libctypes__i
我有一个第三方c#dll,它是在dot net 4.5中创建的,其平台目标是x86.我想把它导入到 python脚本中,我从Rob Deary的答案 here开始.但是我无法让他的例子起作用.我正在使用python版本2.7.6,我得到一个AttributeError,如下所示.

File "C:Python27Libctypes__init__.py",line 378,in __getattr__
    func = self.__getitem__(name)
File "C:Python27Libctypes__init__.py",line 383,in __getitem__
    func = self._FuncPtr((name_or_ordinal,self))
AttributeError: function 'add' not found

请注意,我知道使用Ironpy和Python for dot net,但我需要专门用C python进行这项工作.这是我生成自定义c#库的示例代码:ClassLibrary1.dll

using System;
using System.Runtime.InteropServices;
using RGiesecke.DllExport;

class Test
{
    [DllExport("add",CallingConvention = CallingConvention.Cdecl)]
    public static int TestExport(int a,int b)
    {
        return a + b;
    }
}

这是生成错误的python脚本

import ctypes
lib = ctypes.cdll.LoadLibrary('ClassLibrary1.dll')
lib.add(3,5)

当我使用下面的行时,这是我得到的输出.所以至少我知道它正在加载dll,但我不确定为什么无法找到该函数.

>>> lib.__dict__
{'_FuncPtr': <class 'ctypes._FuncPtr'>,'_handle': 254476288,'_name': 'ClassLibrary1.dll'}
>>>

任何帮助将不胜感激.谢谢

解决方法

正如RGiesecke.DllExport文档所述,您需要在构建代码时针对特定体系结构(x86或x64).将其设置为任何CPU(默认值)将不起作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读