Зарегистрируйтесь для взаимодействия с COM - PullRequest
0 голосов
/ 21 января 2011

Я создаю следующую библиотеку классов в C #:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
//[Guid(<Generate GUID here>)]
public interface _None1
{
    int retval { get; }
}

[ClassInterface(ClassInterfaceType.None)]
//[Guid(<Generate GUID here>)]
[ProgId("Lotr.Test")]
public class None : _None1
{
    public int retval
    {
        get
        { return 1; }
    }
} 

Затем я компилирую его, используя опции «Register for COM Interop» и «Make Assembly COM-visible». Когда я пытаюсь получить доступ к нему с помощью Excel 2007 VBA на моем компьютере, работает нормально. Однако, если я перенесу файлы .dll и .tlb на другую машину, а затем с помощью regasm зарегистрирую ее, регистрация пройдет нормально, я могу сослаться на это в Excel VBA через tlb, intellisense работает как часы, но пока во время выполнения VBA выдает следующую ошибку:
«Ошибка времени выполнения: -2147024894 (80070002)»
«Ошибка автоматизации: система не может найти указанный файл.»

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Возможно, вам нужно использовать /codebase ключ регазма:

regasm your_assembly_name.dll /codebase
0 голосов
/ 21 января 2011

У меня есть некоторые отличия в моих сборках COM:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
//[Guid(<Generate GUID here>)]
public interface _None1
{
    [DispId(1)]
    int retval { get; }
}

[ClassInterface(ClassInterfaceType.None)]
//[Guid(<Generate GUID here>)]
[ProgId("Lotr.Test")]
public class None : _None1
{
    [STAThread]
    public int retval
    {
        get
        { return 1; }
    }
} 

и я не знаю, можно ли в интерфейсе COM использовать операции получения и установки ... может быть, кто-то знает и поможет нам:)

...