C # и ком для VB6 - PullRequest
       58

C # и ком для VB6

1 голос
/ 07 мая 2010

У меня проблема с C # и COM. (

[Guid("f7d936ba-d816-48d2-9bfc-c18be6873b4d")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Process : IProcess
{

    public Process()
    {
    }

    public int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount)
    {
        return 10;
    }
}

[ComVisible(true)]
[Guid("5c640a0f-0dce-47d4-87df-07cee3b9a1f9")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IProcess
{
    int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount);
}

И код VB

Private Sub Command1_Click()
    Dim test As Object
    Set test = New Forwardslash_PlayerTrackingSystem_Api.Process
End Sub

Я получаю следующее

Компонент ActiveX не может создать объект?

Ответы [ 4 ]

1 голос
/ 07 мая 2010

Есть ли у вас ProgID Forwardslash_PlayerTrackingSystem_Api.Process, определенный в источнике C #? Ваш пример кода, кажется, не включает его. (Или вы работаете с существующей библиотекой типов и как-то создаете объект в VB по GUID?)

И правильно ли зарегистрирован компонент C # в реестре на компьютере, на котором выполняется код VB? Посмотрите ответ Paolo , чтобы узнать, как VisualStudio сделает это за вас, когда вы создаете и / или регистрируете его самостоятельно, используя инструмент regasm.exe . Этот инструмент эквивалентен regsrv32.exe для «реальных» COM-объектов, но затем регистрирует надлежащим образом собранную сборку .NET в реестре для использования из COM.

1 голос
/ 07 мая 2010

Ваш атрибут [InterfaceType] неверен. VB6 требуется интерфейс IDispatch, он не может обрабатывать интерфейс IUnknown. Ему больше нравится ComInterfaceType.InterfaceIsDual, который создает полную библиотеку типов, включает IntelliSense в редакторе VB6 и примерно в 1000 раз быстрее, чем IDispatch с поздней привязкой.

1 голос
/ 07 мая 2010

Вы отметили флажок «Зарегистрироваться для COM-взаимодействия» в свойствах проекта?

0 голосов
/ 07 мая 2010

Использование ключа regasm /codebase обязательно, если сборка не зарегистрирована в GAC.

...