从python cod访问C#dll文件函数

2024-09-24 02:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是从python脚本ctypes库访问C#dll文件函数。 我的代码是:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using RGiesecke.DllExport;
    using System.Runtime.InteropServices;

    namespace ConsoleApp1
    {
       [ComVisible(true)]
       public class Program
      {
    [DllExport("MyFunctionName", CallingConvention = CallingConvention.Cdecl)]
    [return: MarshalAs(UnmanagedType.LPWStr)]
    public static string MyFunctionName([MarshalAs(UnmanagedType.LPWStr)] string iString)
    {
        return "hello world i'm " + iString;
    }

    [DllExport("Add",CallingConvention = CallingConvention.Cdecl)]
    public static int Add(int a, int b)
    {
        return a + b;
    }
    [DllExport(CallingConvention = CallingConvention.Cdecl)]
    static public int Subtract(int a, int b)
    {
        return a - b;
    }
    [DllExport(CallingConvention = CallingConvention.Cdecl)]
    static public int Multiply(int a, int b)
    {
        return a * b;
    }
    [DllExport(CallingConvention = CallingConvention.Cdecl)]
    static public int Divide(int a, int b)
    {
        return a / b;
    }

    static void Main(string[] args)
    {
        //Console.Write(Add(2,3));
    }
}

}

python代码是:

^{pr2}$

但我收到错误AttributeError:找不到函数“MyFunctionName”

当我无法访问dll文件中包含的函数时,如何解决这个错误?在


Tags: 文件函数addstringreturnstaticpublicsystem
1条回答
网友
1楼 · 发布于 2024-09-24 02:18:02

也许这有帮助。从rgieseck.DllExport公司文档: -您必须将平台目标设置为x86、ia64或x64。任何CPU程序集都无法导出函数。 -导出名称默认为方法名和stdcall的调用约定。如果这就是你想要的,你只需使用没有参数的[DllExport]。 -不能将导出放入泛型类型或导出泛型方法。(CLR不知道要使用什么类型的参数)

相关问题 更多 >