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

发布于 2024-11-29 02:45:52 字数 1216 浏览 0 评论 0原文

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

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

简单 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,我勾选了 Signing -> 。签署程序集,并给它一个强密钥。

此外,每当我编译时,我都会使用以下命令取消注册旧版本:

regasm -u Test /tlb:Test

然后将其注册为:

regasm Test.dll /tlb:Test

我的问题是,在Python环境中,我有以下main.py,它不起作用:

import win32com.client

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

错误不可原谅。

先感谢您!

Main goal: Create a wrapper for a C# library, which can be used in Python (2.6).

UPDATE: Now, I have updates to the method I am using, which is however not working well.

The code for the simple C# class library:

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

In addition to this, I went into Project Properties and enabled the setting: Register for COM interop.

Also, in order to make the class library available to COM, I ticked Signing -> Sign the Assembly, and gave it a strong key.

Furthermore, whenever I compile, I unregister the old version with:

regasm -u Test /tlb:Test

And I register it with:

regasm Test.dll /tlb:Test

My problem is then, in the Python environment, I have the following main.py, which is not working:

import win32com.client

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

The error is unforgiven.

thank you in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

∝单色的世界 2024-12-06 02:45:53

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

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

A alternative would be if you you use Python for .NET. There seem to be alpha releases for Windows CPython 2.6 and 2.7 available. You could run simply:

import clr
clr.AddReference("Your.Assembly.Name")
import Test
test = Test.TestClass()
print test.Eureka()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文