powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как использовать .NET через COM в других средах?
9 сообщений из 9, страница 1 из 1
Как использовать .NET через COM в других средах?
    #38526811
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Об этом есть статья
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
Как использовать .NET через COM в других средах?
    #38526838
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо п.2 ?

regasm DotNetAsCOM.dll // зарегать все публик классы
gacutil -i DotNetAsCOM.dll // для пущей уверенности закинуть в GAC
...
Рейтинг: 0 / 0
Как использовать .NET через COM в других средах?
    #38526843
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как использовать .NET через COM в других средах?
    #38526875
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser, запуск gacutil -i DotNetAsCOM.dll вызывает сообщение: Failure adding assembly to the cache: Attempt to install an assembly without a strong name.
Пожалуйста, подскажи, как присвоить сборке "строгое имя"
...
Рейтинг: 0 / 0
Как использовать .NET через COM в других средах?
    #38526886
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. Kudryashov,

учебник открой или гугл.
...
Рейтинг: 0 / 0
Как использовать .NET через COM в других средах?
    #38526918
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, этот "костыль", вроде, не к тому случаю. Если перевести с английского: "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
Как использовать .NET через COM в других средах?
    #38526923
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, хорошо ты меня посылаешь по всем адресам. А сам-то ты имеешь достаточную "пущую" уверенность, что Фокс не может создать объект сервера из-за отсутствия "строгой подписи"?
...
Рейтинг: 0 / 0
Как использовать .NET через COM в других средах?
    #38526936
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostislav D. Kudryashov,

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

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


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