Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DLL на .NET для FoxPro / 15 сообщений из 15, страница 1 из 1
02.02.2004, 17:51
    #32395799
NochEinBeginner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
Написана ClassLibrary с несколькими функциями Public, скомпонована в DLL. Нужно чтобы ее могли заюзать другие приложения в частности написанные на фоксе. При вызове функций этой DLL из фокса пишет, что точка входа не найдена и выдает имя функции. Можно вообще написать DLL на .NET чтобы пристегнуть ее к другим приложениям на других языках?
...
Рейтинг: 0 / 0
02.02.2004, 18:00
    #32395815
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
авторМожно вообще написать DLL на .NET чтобы пристегнуть ее к другим приложениям на других языках?

если это Net языки, то да однозначно, если не Net - тоже да.
...
Рейтинг: 0 / 0
02.02.2004, 18:10
    #32395830
NochEinBeginner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
"если не Net - тоже да"

Хм... тогда почти риторический вопрос - как? )))))))))
...
Рейтинг: 0 / 0
03.02.2004, 17:32
    #32397044
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
...
Рейтинг: 0 / 0
03.02.2004, 18:40
    #32397139
NochEinBeginner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
2snake

Это все не то. У меня уже при регистрации компонента говорит что нет точки входа.
...
Рейтинг: 0 / 0
04.02.2004, 08:41
    #32397401
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
1.Какой язык .Net?

2.А ClassLibrary написана с опцией: в свойствах проекта VS флажок Build / Register for COM interop ?

3.А как "конкретно"(код) используете ClassLibrary и что у нее "экспортируется" (определено как public)?

4.Я добился "нормальной" работы...
...
Рейтинг: 0 / 0
04.02.2004, 12:12
    #32397754
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
Если у вас есть что-нить типа ms-help://MS.NETFrameworkSDKv1.1/cpguidenf/html/cpconworkingwithstrongly-namedassemblies.htm].NET Framework SDK Documentation, то смотрите прямо в ней, начиная от страницы "Creating and Using Strong-Named Assemblies".

Порядок действий примерно такой:
1. Делаете .NET-сборку в виде dll;
2. Генерите пару ключей для возможности ее регистрации под COM;
3. Подписываете сборку этими ключами ("Signing an Assembly with a Strong Name");
4. Регистрируете сборку в GAC, возможно с одновременным созданием TLB-файла (".NET Services Installation Tool (Regsvcs.exe)");
5. Регистрируете TLB обычным regsvr32.exe.

Не помню счаз точно, возможно, что п.п. 4 и 5 - взаимоисключающие, или вообще "лишние", т.к. в директории .NET Framework-а есть куча консольных утилит, которые могут из .NET-сборки сделать "подобие ActiveX-COM-dll", когда я давно "экспериментировал" с такими превращениями, то у меня "в сухом остатке" осталось только 4 "важных" файла:
tstcom.cs - исходник;

tstcom.dll - .NET-сборка;

oxp.tstcom.snk - ключи для подписки сборки;

tstcom.reg - обычный файл, для загрузки в реестр сведений об СОМ-компоненте (явно сформированный какой-то утилитой, но не помню счаз - какой именно).

Т.к. текстовыми являются только 1-й и 4-й - приведу их полностью:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
// TSTCOM.cs
//
[assembly:System.Reflection.AssemblyKeyFileAttribute(@ "oxp.tstcom.snk" )]
namespace OXP {
    using System;

    /// <summary>
    /// Summary description for TSTCOM.
    /// </summary>
    public class TSTCOM {

        /// <summary>
        /// Creates a new instance of TSTCOM
        /// </summary>
        public TSTCOM() {
        }

        public string Hello() {
            return  "Hello everybody!" ;
        }

        public int AddTwo(int a, int b) {
            return a + b;
        }

        public string Echo(string a) {
            return a.ToUpper();
        }
    }
}

REGEDIT4

[HKEY_CLASSES_ROOT\OXP.TSTCOM]
@= "OXP.TSTCOM" 

[HKEY_CLASSES_ROOT\OXP.TSTCOM\CLSID]
@= "{82F69283-9C92-3021 -ACB7-CF2D8A400F06}"

[HKEY_CLASSES_ROOT\CLSID\{82F69283-9C92- 3021 -ACB7-CF2D8A400F06}]
@= "OXP.TSTCOM" 

[HKEY_CLASSES_ROOT\CLSID\{82F69283-9C92- 3021 -ACB7-CF2D8A400F06}\InprocServer32]
@= "mscoree.dll" 
 "ThreadingModel" = "Both" 
 "Class" = "OXP.TSTCOM" 
 "Assembly" = "TSTCOM, Version=0 . 0 . 0 . 0 , Culture=neutral, PublicKeyToken=f5cd2565ac4a140f"
 "RuntimeVersion" = "v1.1 . 4322 "
 "CodeBase" = "file:///L:/a_user/Projects/OXP/TSTCOM.DLL" 

[HKEY_CLASSES_ROOT\CLSID\{82F69283-9C92- 3021 -ACB7-CF2D8A400F06}\InprocServer32\ 0 . 0 . 0 . 0 ]
 "Class" = "OXP.TSTCOM" 
 "Assembly" = "TSTCOM, Version=0 . 0 . 0 . 0 , Culture=neutral, PublicKeyToken=f5cd2565ac4a140f"
 "RuntimeVersion" = "v1.1 . 4322 "
 "CodeBase" = "file:///L:/a_user/Projects/OXP/TSTCOM.DLL" 

[HKEY_CLASSES_ROOT\CLSID\{82F69283-9C92- 3021 -ACB7-CF2D8A400F06}\ProgId]
@= "OXP.TSTCOM" 

[HKEY_CLASSES_ROOT\CLSID\{82F69283-9C92- 3021 -ACB7-CF2D8A400F06}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]


В результате, после подгрузки файла tstcom.reg в реестр - можно смело в Фоксе писать:
Код: plaintext
1.
2.
3.
o1 = CreateObject( "OXP.TSTCOM" )
?o1.Hello()
?o1.AddTwo( 1 , 2 )


Все работает...
...
Рейтинг: 0 / 0
04.02.2004, 12:44
    #32397820
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
P.S.

Только что перепроверил на другой машине (где заведомо не было установлено ничего, кроме .NET Framework v1.1), все нормально работает:
1. скопировал tstcom.dll и tstcom.reg;
2. заменил в файле tstcom.reg путь к tstcom.dll на реальный, соответствующий другой машине;
3. подгрузил tstcom.reg (наплевав на то, что GUID остался прежним, хотя можно было и его поменять при важном случае);
4. выполнил CreateObject("OXP.TSTCOM") из VB-скрипта... выполнилось успешно...
...
Рейтинг: 0 / 0
04.02.2004, 14:12
    #32397996
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
2 qu-qu
устанавливать сборку в GAC нет необходимости (по крайней мере на машине разработчика). следовательно она м.б и не подписана.
Опция Build / Register for COM interop при сборке проекта пишет в реестр нечто похожее что ты привел:
...
[HKEY_CLASSES_ROOT\CLSID\{82F69283-9C92-3021-ACB7-CF2D8A400F06}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="OXP.TSTCOM"
"Assembly"="TSTCOM, Version=1.0.1495.21988, Culture=neutral, PublicKeyToken= null "
"RuntimeVersion"="v1.1.4322"
"CodeBase"="file:///L:/a_user/Projects/OXP/TSTCOM.DLL"

осталось разобратся как сборку поставлять на чистые машины. жаль нельзя использовать ту же схему что и при регистрации ocx, так бы подсунул ее InstallShield Express, а тот ее зарегистрировал.
...
Рейтинг: 0 / 0
04.02.2004, 16:21
    #32398284
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
2 snake

Когда я разбирался с этой хренью, то у меня даже VS.NET на тачке не было... компилил просто исходники с помощью csc.exe из Framework SDK, запускал всякие утилитки для "подписки" строгих имен, генерения ключей с GUID-ами, и никаких опций Build / Register for COM interop даже в глаза не встречал.

Поэтому и ковырялся в хелпах на предмет того - как же именно засунуть сборку с СОМ-функциональностью на "чистую" машину?

Результат теперь вижу (1 файл сборки + 1 файл регистрации + готовый Framework нужной версии), но вот вспомнить - как я этого добился - не могу, извините... :-))

З.Ы. то что в GAC не обязательно пихать - это я уже "вспомнил"...
...
Рейтинг: 0 / 0
04.02.2004, 16:29
    #32398297
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
Неподписанные сборки (private assemblies) можно поставлять так:
не надо никаких tlb, копируете сборку на машину и выполняете
Код: plaintext
regasm myTest.dll /codebase

если regasm нет на машине назначения, на своей машине генерите reg файл:
Код: plaintext
regasm myTest.dll /regfile:install.reg

и далее по пунктам:
http://www.sql.ru/forum/actualpost.aspx?bid=12&tid=71991&mid=0&p=1#520416
...
Рейтинг: 0 / 0
04.02.2004, 16:33
    #32398303
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
...естесвенно Framework на машине назначения присутсвовать обязан, вот входит ли внего regasm - я без понятия.
Остался вопрос: как собрать полностью корректный дистрибутив если пользуешься InstallShield Express

2qu-qu
спасибо.
...
Рейтинг: 0 / 0
04.02.2004, 16:59
    #32398356
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
.. ну не "руками" же ее поставлять в самом деле.
...
Рейтинг: 0 / 0
04.02.2004, 19:01
    #32398549
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
regasm лежит в каталоге Net Framework\ так что наверное с ней и идет (т.е. SDK или VS.Net я думаю ему не нужны)
...
Рейтинг: 0 / 0
10.02.2004, 10:46
    #32403725
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL на .NET для FoxPro
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DLL на .NET для FoxPro / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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