powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как в .Net сделать dll что бы её использовать в Cache ?
16 сообщений из 16, страница 1 из 1
как в .Net сделать dll что бы её использовать в Cache ?
    #37780244
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал вот такой проект в VS 2010 (тип проекта - библиотека типов)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
using System.Runtime.InteropServices;

namespace sms
{
    [ComVisible(true)]
    public interface IWelcome
    {
        string Greetings(string name);
    }

    [ComVisible(true)]
    public class Class1
    {
        public Class1()
        {

        }

        public string Greeting(string name)
        {
            return "Hello " + name;
        }
    }
}


подписал строгим именем, поставил галочки "сделать видимым для COM" - это всё в свойствах проекта

далее добавил в кэш
Код: powershell
1.
2.
3.
4.
5.
6.
C:\Program Files\Microsoft Visual Studio 10.0\VC>gacutil -i C:\C#\sms\sms\bin\De
bug\sms.dll
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
(c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

Сборка успешно добавлена в кэш



и зарегистрировал библиотеку типов
Код: powershell
1.
2.
3.
4.
5.
6.
C:\Program Files\Microsoft Visual Studio 10.0\VC>regasm C:\C#\sms\sms\bin\Debug\sms.dll /tlb
Microsoft (R) .NET Framework Assembly Registration Utility, версия 4.0.30319.1
(C) Корпорация Майкрософт, 1998-2004. Все права защищены.

Типы зарегистрированы успешно
Сборка экспортирована в "C:\C#\sms\sms\bin\Debug\sms.tlb"; библиотека типов зарегистрирована успешно



далее пытаюсь использовать в Cache Terminal (Cache 5.0)
Код: c#
1.
2.
3.
4.
5.
6.
7.
USER>s f="C:\C#\sms\sms\bin\Debug\sms.dll"
 
USER>w $ZF(-3,f,"Greeting","zzz")
 
W $ZF(-3,f,"Greeting","zzz")
^
<DYNAMIC LIBRARY LOAD>



Что я сделал неправильно и что нужно сделать что бы использовать эту dll в Cache?
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37780290
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На .Net я думаю так легко не сделать dll для cache тем более для 5.0
лучше делайте на C

и почитайте документацию как это надо делать
внешняя документация на сайте IS почему то не работает
даю ссылку локальную, правда для версии 2008
http://localhost:57772/csp/docbook/DocBook.UI.Page.cls?KEY=GCIO_callin
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37780598
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем, тут ты сделал .NET dll, и с COM интерфейсом, а вызываешь как cache callout dll.
Тут либо делать dll как callout dll либо вызывать COM объект как COM объект.
Посмотри в документации описание Cache Activate. Либо генери переходник визардом из студии / меню Tools, либо по имени твоего класса через класс %Activate.GenericObject.
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37780602
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только я бы очень не рекомендовал использовать COM, в связи с тем что он работать будет только на 32 битной версии
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37780606
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorТолько я бы очень не рекомендовал использовать COM, в связи с тем что он работать будет только на 32 битной версии
Ну что же вы, дайте человеку по граблям походить.
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37782685
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,

я правильно понимаю - callout dll вызывается из каше посредством $ZF функций

а COM объекты вызываются с помощью классов-обёрток создаваемых мастером Activate, и вот именно этот вариант нежелательно использовать?
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37782737
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

именно так.
COM через обертки, который не стоит использовать так как устарел и не будет никогда на 32 битных системах

а callout dll вызываемый через $zf(), но писать их насколько я знаю можно только на C/C++, для .Net нет поддержки
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37782769
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

большое спасибо
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37784353
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя чисто технически вполне возможно написать callout dll на .NET, если использовать маркировку функций
[System.Reflection.Obfuscation(Feature = "DllExport")]
и соответственно указать как маршалировать параметры.
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37784463
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я,

Жень, а термин callout dll имеет синонимы? Я погуглил эти слова, но не нашёл ни определения, ни описания.
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37784473
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

гуглить бесполезно, это имеет отношение к Cache, и гуглить нужно по документации к ней, но там ты опять же ничего для .Net не найдешь. в качестве примера предлагаю почитать cdzf.h который включается в сишный код для того чтобы dll стало можно было вызывать из Cache
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37784478
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

я видел этот файл, но в C не разбираюсь, поэтому ничего не понял.

я так понял - что DLL должна реализовывать какие то интерфейсы, специально для каше?
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37784804
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78,

в общем порылся тут немного и понял что через $zf() вызывать c# dll, путь слишком сложный и скорее путь гуру C#.
И даже если вы сможете пройти путь описанный здесь , то вам еще придется понять какую структуру экспорта функций требуется описать чтобы ее понял Cache, а ведь многое придется почерпнуть из cdzf.h, чтобы это заработало.

есть путь проще но что то мне подсказывает что он появился далеко после Cache 5.0
вот описание того как это можно сделать на 2012 версии (есть вроде и 2010 версии, самая ранняя не знаю какая)
надеюсь ссылка на docbook IS работает, что-то он последнее время работает из рук вон плохо

способ который там описан сравним с использованием Java в cache, создается сетевой шлюз и через него идет работа с вашей dll. Можно на основе вашей dll создать в каше прокси класс для удобства вызова методов из Dll.
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37785362
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78я так понял - что DLL должна реализовывать какие то интерфейсы, специально для каше?Совершенно верно: 11534672 .
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37790246
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

очередная попытка

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#define _CRT_SECURE_NO_WARNINGS
#define ZF_DLL

#include <stdio.h>
#include "cdzf.h" 
#include <string.h>


int Test( char* empty)
{
  return 0;
};

struct zfestr MyDll[] = {
ZFENTRY( "TEST", "c", (int(*)())Test)
ZFEND

 struct __declspec(dllexport) zfestr* GetZFTable()
{
  return MyDll;
};



в Cache
USER>s ret=$zf(-3,"c:\dll2.dll","TEST","zzz")

S ret=$ZF(-3,"c:\dll2.dll","TEST","zzz")
^
<DYNAMIC LIBRARY LOAD>


Кто нибудь писал callout dll для каше на Visual Studio ?

Дайте пример
...
Рейтинг: 0 / 0
как в .Net сделать dll что бы её использовать в Cache ?
    #37790290
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78 struct __declspec(dllexport) zfestr* GetZFTable()

* добавь функции спецификаторы extern "C" и __stdcall
* посмотри в файле реальное имя, если стоит не GetZFTable, а _GetZFTable, то добавь в проект def файл и в нем укажи явно
EXPORTS
GetZFTable
* проверь что каше и твоя dll одинаковой битности, или 32 или 64
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / как в .Net сделать dll что бы её использовать в Cache ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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