Не могу создать COM

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Не могу создать COM

Сообщение vg »

Делаю COM в VB.NET 2005:

Код: Выделить всё

Imports System.Reflection
<Assembly: AssemblyKeyFile("C:\PRG\VB\COM\MyClassLibrary\MyNETClass.snk")> 
Public Interface ITestMessage
    Function GetMessage() As String
End Interface

Public Class MyNETClass
    Implements ITestMessage

    Public Function GetMessage() As String Implements ITestMessage.GetMessage
        Return "Test Message"
    End Function
End Class
При попытке Add Reference получаю сообщение об ошибке:

A reference to 'MyClassLibrary' could not be added.
The ActiveX type library 'C:\....\MyClassLibrary.tlb' was exported from a .Net assembly and cannot be added as a reference.
Add a reference to the .NET assembly instead.

При этом легко могу добавить (и использовать) reference на MyClassLibrary.dll. Когда же пытаюсь подключить этот же COM в VBA Excel (там тоже ссылка на 'C:\....\MyClassLibrary.tlb') то не работает код:

Код: Выделить всё

Sub test()
Dim obj As MyNETClass
Set obj = New MyNETClass
obj.GetMessage
End Sub
Выдаётся сообщение:
Run-time error'-2147024894(80070002)':
File or assembly name MyClassLibrary, or one of its dependencies, was not found.

Где искать ошибку?
Спасибо.
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45211
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Сообщение Stanislav »

:off: Мда... тяжелый случай...
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а):вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
Надо CCW обернуть .NET функциональность. Не разницы, хоть на VB.NET, хоть на C#.
У меня появилась тройка проектов (там тонна существующего кода на VBA Excel), где надо срочно прикрутить сущестующую функциональность сделанную в .NET.
Переделать эту .NET функциональность в обычный COM framework много времени возмёт (практически не возможно за то время, что у меня есть).
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Сообщение папа Карло »

vg писал(а):
папа Карло писал(а):вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
Надо CCW обернуть .NET функциональность. Не разницы, хоть на VB.NET, хоть на C#.
У меня появилась тройка проектов (там тонна существующего кода на VBA Excel), где надо срочно прикрутить сущестующую функциональность сделанную в .NET.
Переделать эту .NET функциональность в обычный COM framework много времени возмёт (практически не возможно за то время, что у меня есть).
в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а): в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
Ты думаешь COM Add-in ("плагины"для приложений Office) это не COM в сущности? Но вопрос даже не в этом... Вопрос в том, что это самый простой способ to expose .NET функциональность в обычный COM для обычных COM клиентов. VB здесь не причём. Это инструмент, чтобы NET библиотеки задействовать.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Забыл сказать... Так будет понятнее - на VB надо сделать wrappers (CCW) для того, чтобы обычным COM клиентам стало доступно то, что уже сделано в классах .NET FrameWork.
Аватара пользователя
Earl Grey
Маньяк
Сообщения: 2893
Зарегистрирован: 22 фев 2005, 15:07

Сообщение Earl Grey »

vg писал(а):
папа Карло писал(а): в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
Ты думаешь COM Add-in ("плагины"для приложений Office) это не COM в сущности? Но вопрос даже не в этом... Вопрос в том, что это самый простой способ to expose .NET функциональность в обычный COM для обычных COM клиентов. VB здесь не причём. Это инструмент, чтобы NET библиотеки задействовать.
VSTO тебе поможет.

BTW, IMHO .net функциональность можно "expose" только если ее (функциональность) использовать, в противном случае это - профанация.

Типа, добавить два тэга <myXml> & </myXml> и существующие данные обернуть в CDATA и гордо заявлять что используешь XML.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

папа Карло писал(а):
vg писал(а):
папа Карло писал(а):вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
Надо CCW обернуть .NET функциональность. Не разницы, хоть на VB.NET, хоть на C#.
У меня появилась тройка проектов (там тонна существующего кода на VBA Excel), где надо срочно прикрутить сущестующую функциональность сделанную в .NET.
Переделать эту .NET функциональность в обычный COM framework много времени возмёт (практически не возможно за то время, что у меня есть).
в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
Запечатало... Вылечилось установкой фикса для VS 2005
http://support.microsoft.com:80/kb/908002
(мне подсказали).
Подсказали ещё более простое решение:
excel.exe.config:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Earl Grey писал(а):
VSTO тебе поможет.
VSTO не помогло, http://vsto.hao.ucar.edu/
И вообще ... я в астрологию и гадания не верю.
Ответить