Создание оболочки для библиотеки C # в Python - PullRequest
3 голосов
/ 10 августа 2011

Основная цель: создать оболочку для библиотеки 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, я поставил галочку «Подписать -> Подписать сборку» и дал ей сильный ключ.

Кроме того, всякий раз, когда я компилирую, я отменяю регистрацию старой версии с помощью:

regasm -u Test /tlb:Test

И регистрирую ее с помощью:

regasm Test.dll / tlb:Тест

Моя проблема в том, что в среде Python у меня есть следующий main.py, который не работает:

import win32com.client

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

Ошибка не прощена.

Заранее спасибо!

1 Ответ

2 голосов
/ 10 августа 2011

Альтернативой может быть, если вы используете Python для .NET .Похоже, доступны альфа-версии для Windows CPython 2.6 и 2.7 .Вы можете запустить просто:

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