:: Visual Foxpro, Foxpro for DOS
Как использовать .NET через COM
RostKudr
Автор

Сообщений: 4
Дата регистрации: 01.05.2011
Об этом есть статья www.west-wind.com
но по этому образцу у меня не получается. Вот что я пока что сотворил.
Выполнение пунктов 1 и 2 из комментариев в исходнике проходит без запинки. Но когда залезаю в среду VFP 9 SP2 и даю команду по пункту 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 5.1.4 тоже дот-нетовский COM не распознаётся, а бэйсиков вызывается нормально.
Делал пробы в .NET 2 и 4, с ключом x86 и без.
Так что у меня не так?
// 1. csc /t:library DotNetAsCOM.cs
// 1. csc /t:library /platform:x86 DotNetAsCOM.cs
// 2. regasm DotNetAsCOM.dll /tlbotNetAsCOM.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
Ratings: 0 negative/0 positive
Re: Как использовать .NET через COM
RostKudr
Автор

Сообщений: 4
Дата регистрации: 01.05.2011
Поступили сведения, что регистрировать надо командой
regasm DotNetAsCOM.dll /codebase /tlbotNetAsCOM.tlb
а для полного успеха надо назначить сборке (assembly) некое строгое имя (strong name)
Ratings: 0 negative/0 positive
Re: Как использовать .NET через COM
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
RostKudr
/codebase
Да, это надо добавлять. При том регистрировать от лица администратора, ну и верный вариант утилиты regasm выбирать (если установлено несколько версий дотнета - "различаются" 2-я и 4-я. 3 и 3.5 на самом деле это ядро 2 версии + некоторые "добавки").
RostKudr
а для полного успеха надо назначить сборке (assembly) некое строгое имя (strong name)
Скажем так - для того чтобы regasm не выдавал предупреждений, но работать оно будет и без строгого имени.
Вообще, если ещё не читал, очень советую там же прочесть про wwDotNetBridge - это хитрая система для стыковки фокса с дотнетом не требующая использования regasm и соответственно создания "специальных" ComVisible(true) сборок (а заодно и наличия прав администратора для "установки/регистрации" компонент у клиента). Автор сделал её некоторое время назад свободной и опубликовал исходники (на github).
Для многих применений это может оказаться более удобным и практичным чем создание специальных COM interop сборок (несмотря на то что сами "обращения к дотнетовским классам из фокса" будут более "многобуквенными").


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика