Страница 1 из 1
Не могу создать COM
Добавлено: 01 янв 2007, 19:47
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.
Где искать ошибку?
Спасибо.
Добавлено: 01 янв 2007, 19:49
Stanislav

Мда... тяжелый случай...
Добавлено: 01 янв 2007, 20:03
папа Карло
вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
Добавлено: 01 янв 2007, 20:26
vg
папа Карло писал(а):вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
Надо CCW обернуть .NET функциональность. Не разницы, хоть на VB.NET, хоть на C#.
У меня появилась тройка проектов (там тонна существующего кода на VBA Excel), где надо срочно прикрутить сущестующую функциональность сделанную в .NET.
Переделать эту .NET функциональность в обычный COM framework много времени возмёт (практически не возможно за то время, что у меня есть).
Добавлено: 01 янв 2007, 20:28
папа Карло
vg писал(а):папа Карло писал(а):вопрос..... а зачем ты хочешь на VB.NET создать СОМ?
Надо CCW обернуть .NET функциональность. Не разницы, хоть на VB.NET, хоть на C#.
У меня появилась тройка проектов (там тонна существующего кода на VBA Excel), где надо срочно прикрутить сущестующую функциональность сделанную в .NET.
Переделать эту .NET функциональность в обычный COM framework много времени возмёт (практически не возможно за то время, что у меня есть).
в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
Добавлено: 01 янв 2007, 20:36
vg
папа Карло писал(а):
в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
Ты думаешь COM Add-in ("плагины"для приложений Office) это не COM в сущности? Но вопрос даже не в этом... Вопрос в том, что это самый простой способ to expose .NET функциональность в обычный COM для обычных COM клиентов. VB здесь не причём. Это инструмент, чтобы NET библиотеки задействовать.
Добавлено: 01 янв 2007, 20:39
vg
Забыл сказать... Так будет понятнее - на VB надо сделать wrappers (CCW) для того, чтобы обычным COM клиентам стало доступно то, что уже сделано в классах .NET FrameWork.
Добавлено: 01 янв 2007, 21:53
Earl Grey
vg писал(а):папа Карло писал(а):
в инте вагон примеров как делать плагины на си шарпе для эксела.. я свой делал давно... почему спросил.... обыно .нет не пользуют чтоб КОМ создавать....
Ты думаешь COM Add-in ("плагины"для приложений Office) это не COM в сущности? Но вопрос даже не в этом... Вопрос в том, что это самый простой способ to expose .NET функциональность в обычный COM для обычных COM клиентов. VB здесь не причём. Это инструмент, чтобы NET библиотеки задействовать.
VSTO тебе поможет.
BTW, IMHO .net функциональность можно "expose" только если ее (функциональность) использовать, в противном случае это - профанация.
Типа, добавить два тэга <myXml> & </myXml> и существующие данные обернуть в CDATA и гордо заявлять что используешь XML.
Добавлено: 02 янв 2007, 17:01
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>
Добавлено: 02 янв 2007, 17:05
vg
Earl Grey писал(а):
VSTO тебе поможет.
VSTO не помогло,
http://vsto.hao.ucar.edu/
И вообще ... я в астрологию и гадания не верю.