Я пытаюсь выяснить, могу ли я создать COM-компонент в C # (.NET 4), который я могу использовать из программы VB5 (см. Насмешливые замечания) для доступа к веб-службе.Следуя всем инструкциям, которые мне удалось найти в MSDN и CodeProject, выполните следующие действия:
Я написал следующее:
[Guid("7A715F02-D349-45DC-B0AE-9925FD3B943C")]
public interface ARCOM_Interface
{
[DispId(1)]
string GetServiceResponse();
}
[Guid("5130F041-619E-41F9-84B6-8332642228F6")
, InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ARCOM_Events
{
}
[Guid("0A77754F-34CF-4E0E-AAC2-85FD686758E0")
, ClassInterface(ClassInterfaceType.None)
, ComSourceInterfaces(typeof(ARCOM_Events))]
[ComVisible(true)]
public class ARCOM_Class : ARCOM_Interface
{
public string GetServiceResponse()
{
string response = string.Empty;
ARWebService.ARWebService svc = new ARWebService.ARWebService();
response = svc.PingMeBack();
return response;
}
}
Соответствующая сборка подписана строгим именем, а выход зарегистрирован для COM-взаимодействия.После сборки я применил к нему RegAsm и сгенерировал библиотеку типов с помощью tlbexp.exe.
В VB6, когда я открываю список ссылок из свойств проекта, я могу найти сборку в списке и проверить ее.Я даже могу сделать следующее в коде VB6:
Private Sub HitWebService()
Dim arcom As ARCOMObject.ARCOM_Class
arcom. <== Intellisense doesn't sense anything!
End Sub
Intellisense видит ARCOMObject и класс, но ничего, что находится внутри самого ARCOM_Class (за исключением обычного GetType, Equals идругие общие методы / свойства объекта).В частности, кажется, что он не видит метод GetServiceResponse (), поэтому я не могу вызвать его.
Что я пропускаю?