Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как использовать .NET через COM в других средах? / 9 сообщений из 9, страница 1 из 1
15.01.2014, 12:44
    #38526811
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Об этом есть статья
http://www.west-wind.com/presentations/VfpDotNetInterop/DotNetFromVFP.asp
но по этому образцу у меня не получается. Вот что я пока что сотворил.
Выполнение пунктов 1 и 2 из комментариев в исходнике проходит без запинки. Но когда залезаю в среду Фокса и даю команду по пункту 3, выскакивает сообщение
OLE Error Code 0x80070002: The system cannot find the file specified.

Этот же DotNetAsCOM.dll отлично вызывается из MS Visual Basic 6, правда, там требуется включить в проект ссылку на библиотеку DotNetAsCOM.tlb. И бэйсиково exe-приложение ActiveX с вывеской формы из Фокса нормально вызывается.
Библиотека типов DotNetAsCOM.tlb распознаётся в Фоксе через ObjectBrowser, а вот .dll за COM библиотеку не признаётся.
И из Lua тоже дот-нетовский COM не распознаётся, а бэйсиков вызывается нормально.
Делал пробы в .NET 2 и 4, с ключом x86 и без.
Так что у меня не так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// 1. csc /t:library DotNetAsCOM.cs
// 1. csc /t:library /platform:x86 DotNetAsCOM.cs
// 2. regasm DotNetAsCOM.dll /tlb:DotNetAsCOM.tlb
// 3. o = CREATEOBJECT ('DotNetAsCOM.CSharpCalc')

using System;
using System.Runtime.InteropServices;

namespace DotNetAsCOM
{
  [ClassInterface(ClassInterfaceType.AutoDual)]
  [ProgId("DotNetAsCOM.CSharpCalc")]
  public class CSharpCalc
  {
    public CSharpCalc() { }
    public int Add(int x, int y) { return x + y; }
    public int Subtract(int x, int y) { return x - y; }
  } // CSharpCalc
} // DotNetAsCOM
...
Рейтинг: 0 / 0
15.01.2014, 13:16
    #38526838
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Вместо п.2 ?

regasm DotNetAsCOM.dll // зарегать все публик классы
gacutil -i DotNetAsCOM.dll // для пущей уверенности закинуть в GAC
...
Рейтинг: 0 / 0
15.01.2014, 13:17
    #38526843
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Rostislav D. Kudryashovа вот .dll за COM библиотеку не признаётся.
и не должен

здесь костыль вроде нашли -
http://stackoverflow.com/questions/10556948/why-do-i-get-type-library-not-found-when-consuming-net-com-server-from-foxpro-c
...
Рейтинг: 0 / 0
15.01.2014, 13:36
    #38526875
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
buser, запуск gacutil -i DotNetAsCOM.dll вызывает сообщение: Failure adding assembly to the cache: Attempt to install an assembly without a strong name.
Пожалуйста, подскажи, как присвоить сборке "строгое имя"
...
Рейтинг: 0 / 0
15.01.2014, 13:39
    #38526886
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Rostislav D. Kudryashov,

учебник открой или гугл.
...
Рейтинг: 0 / 0
15.01.2014, 13:54
    #38526918
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Изопропил, этот "костыль", вроде, не к тому случаю. Если перевести с английского: "I have a .Net COM server that has a method that takes a message and a delay as parameters. After the delay, it fires an event sending the message back to the client. It works with .Net and VB6 clients." на русский, то получится
"У меня есть .Net COM сервер с методом, который принимает сообщение и задержку как параметры. После задержки он выдаёт событие, шлющее сообщение обратно клиенту. Это работает с клиентами с .Net и VB6.
И далее разъясняется, как в привязать в Фоксе события из КОМ-сервера. Когда-нибудь мне это может и пригодится, но сейчас мне нужно сначала просто создать объект КОМ-сервера.
...
Рейтинг: 0 / 0
15.01.2014, 13:57
    #38526923
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Изопропил, хорошо ты меня посылаешь по всем адресам. А сам-то ты имеешь достаточную "пущую" уверенность, что Фокс не может создать объект сервера из-за отсутствия "строгой подписи"?
...
Рейтинг: 0 / 0
15.01.2014, 14:04
    #38526936
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Rostislav D. Kudryashov,

строгая подпись нужна для помещения сборки в GAC
...
Рейтинг: 0 / 0
15.01.2014, 14:08
    #38526940
Rostislav D. Kudryashov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как использовать .NET через COM в других средах?
Не пронял, в чём фокус, но после регистрации
regasm DotNetAsCOM.dll /codebase /tlb:DotNetAsCOM.tlb
с получением предупреждения
RegAsm : warning RA0000 : Регистрация сборки без подписи с использованием параметра /codebase может вызвать конфликт данной сборки с другими приложениями ...
Фокс успешно выполнил
o = CREATEOBJECT ('DotNetAsCOM.CSharpCalc')

Спасибо, друзья, что ткнули носом неуча. У меня был выбор: или учить MS Visual Basic 6 или C#.
Буду учить C#
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как использовать .NET через COM в других средах? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]