在Python中为C#库创建包装器

3 投票
1 回答
5682 浏览
提问于 2025-04-16 23:16

主要目标:创建一个可以在Python(2.6)中使用的C#库的包装器。

更新:现在,我对正在使用的方法进行了更新,但效果不太好。

这是一个简单的C#类库的代码:

using System;
using System.Text;
using System.Runtime.InteropServices;

namespace Test
{
    [Guid("8F38030D-52FA-4816-B587-A925FDD33302")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface _TestClass
    {
        [DispId(1)]
        string Eureka();
    }

    [Guid("BC3F6BB3-42C4-4F30-869A-92EA45BF68D2")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("Test.TestClass")]
    public class TestClass : _TestClass
    {
        public TestClass()
        {
        }

        public string Eureka()
        {
            return "Hudson, we no longer have a problem!";
        }
    }
}

enter code here

除此之外,我还进入了项目属性,启用了“注册以进行COM互操作”的设置。

为了让这个类库可以被COM使用,我还勾选了“签名”选项,并给它设置了一个强密钥。

此外,每次编译时,我都会用以下命令注销旧版本:

regasm -u Test /tlb:Test

然后我用以下命令注册它:

regasm Test.dll /tlb:Test

我的问题是,在Python环境中,我有一个main.py文件,但它无法正常工作:

import win32com.client

o = win32com.client.Dispatch("Test.TestClass")

错误是致命的。

提前谢谢你!

1 个回答

3

另一种选择是使用 Python for .NET。目前似乎有适用于 Windows的CPython 2.6和2.7 的测试版本。你可以简单地运行:

import clr
clr.AddReference("Your.Assembly.Name")
import Test
test = Test.TestClass()
print test.Eureka()

撰写回答