Наличие проблемы, регистрирующей блок для COM

Я создал простой проект библиотеки классов в Visual Studio 2008, который имеет один класс как показано ниже. Я пытаюсь заставить этот класс регистрироваться для взаимодействующего с COM так, чтобы я мог использовать на пути неуправляемые сценарии как vbscript или jscript.

В моих свойствах сборки проекта я установил флажок, который говорит "Регистр для COM Interop".

В Настройках блока я проверил, "Делают этот блок COM Видимый", и я подтвердил что [assembly: ComVisible(true)] атрибут присутствует в assembly.cs файле.

Каждый раз, когда я разрабатываю этот проект, я получаю ошибку, которая читает "projectname.dll, не содержит типов, которые могут быть зарегистрированы для COM Interop. Кроме того, я не смог успешно создать экземпляр класса 1 с помощью vbscript. Кто-либо знает, что это не регистрируется правильно?

Моему vbscript не удается создать объект activex в этой строке... Set F = CreateObject("64BitCLTest.Class1").

Наконец, как я заставляю VS регистрировать это в области на 64 бита реестра вместо области на 32 бита так, чтобы процессы на 64 бита могли использовать его?

-- The Test Class--
namespace _64BitCLTest
{
    [Guid("BBAA06EF-CA4C-4fe2-97CD-9B1D85ADA656")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    [ProgId("64BitCLTest.Class1")]
    public class Class1
    {
        Class1()
        {
            // do nothing
        }

        public string Method1()
        {
            return "This is a return string from method 1";
        }

        public int Property1
        {
            get {return 777;}
        }
    }
}
1
задан PICyourBrain 28 July 2010 в 17:06
поделиться

2 ответа

вам нужно пометить конструктор как общедоступный:

-- The Test Class--
namespace _64BitCLTest
{
    [Guid("BBAA06EF-CA4C-4fe2-97CD-9B1D85ADA656")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    [ProgId("64BitCLTest.Class1")]
    public class Class1
    {
        public Class1()
        {
            // do nothing
        }

        public string Method1()
        {
            return "This is a return string from method 1";
        }

        public int Property1
        {
            get {return 777;}
        }
    }
}
2
ответ дан 2 September 2019 в 22:39
поделиться

Этот ответ состоит из двух частей. Первая проблема, как сказал консалтутах, заключалась в том, что у меня не было конструктора, помеченного как общедоступный.

Второй ответ заключается в том, что (я полагаю) в VS2008 есть ошибка, из-за которой сборки никогда не регистрируются в 64-битном разделе реестра, даже если проект установки настроен для целевой платформы x64.

Я установил VS2010, перестроил тот же проект и запустил Install. Сборка зарегистрировалась отлично, и я смог успешно получить к ней доступ через COM, используя 64-битный процесс. Я до сих пор не нашел решения для этого в VS2008.

0
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: