Я создал простой проект библиотеки классов в 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;}
}
}
}
вам нужно пометить конструктор как общедоступный:
-- 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;}
}
}
}
Этот ответ состоит из двух частей. Первая проблема, как сказал консалтутах, заключалась в том, что у меня не было конструктора, помеченного как общедоступный.
Второй ответ заключается в том, что (я полагаю) в VS2008 есть ошибка, из-за которой сборки никогда не регистрируются в 64-битном разделе реестра, даже если проект установки настроен для целевой платформы x64.
Я установил VS2010, перестроил тот же проект и запустил Install. Сборка зарегистрировалась отлично, и я смог успешно получить к ней доступ через COM, используя 64-битный процесс. Я до сих пор не нашел решения для этого в VS2008.