компиляция DLL из IDL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

компиляция DLL из IDL

Сообщение evchic »

добрый день!
получил IDL файл отдал его mild.exe
получил
dlldata.c
FULL.h
FULL_i.c
FULL_p.c
FULL.tlb
ручками создал файл FULL.def

А теперь немогу продвинутся дальше незнаю как откомпилить с С++ некогда не работал... помогите пожалуйста!
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

evchic
какая задача? dll я так думаю не самоцель? Вообще-то то, что ты получил - лишь прокси для работы с COM объектом, не более
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

вообщем цель такая нужно через OLE обратится к собственному VIPINTERFACE... через LoadVip чтоб можно было использовать его функции и процедуры... при помощи которых будут туда и обратно гонятся данные... Вообщем вот так... на сколько я понил из доки нудно сделать эту dll и зарегистрировать в винде...

я побывал пример из доки

Код: Выделить всё

Dim GalApp As Variant, Iface As Variant
Set GalApp = CreateObject("GalNet.App")
IFace = GalApp.LoadVip("MyVip")
if (IFace Is Nothing) then
MsgBox "Функции API не реализованы"
Exit Sub
end if
Нечего не вышло умирает вот здесь

Код: Выделить всё

IFace = GalApp.LoadVip("MyVip")
Rut-time error '438':
Object doesn't support this property or method
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

evchic
Посмотри в Атлантисе пример с web-сервисами, в нем есть файл processIDL.bat - там с помощью bcc32.exe и ilink32.exe происходит сборка COM proxy - это именно то, что тебе нужно. Далее полученную dll не забудь зарегить с помощью regsvr32 + добавь в файл AtlGUID.txt GUID твоего интерфейса
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

скинь пожалуйста настроенный processIDL.bat
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

так этот этап прошол теперь проблема с запуском..
Скажите "13AAEF50-CE08-11D5-A27B-00204CE40998" IAtlantisAppSrv должен быть в реестре?
С++ ругается
C:\Program Files\Microsoft Visual Studio\MyProjects\hhh\hhh.cpp(6) : error C2501: 'MIDL_INTERFACE' : missing storage-class or type specifiers
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

evchic
Да, это и есть сервер приложений, через него получается ссылка на твой интерфейс. Зарегить galsrv -install
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

1. galsrv -install сделал но в реестре 13AAEF50-CE08-11D5-A27B-00204CE40998 не появился в с++ таже ошибка
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

а служба galsrv запущена? Класс 2C4CF260-DAA2-11d5-A29D-00204CE40998 зареген?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

а через запуск внешнего интерфейса такой есть? Или там еще имя компоненты? Да и регистр может быть важен
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

edward_K писал(а):а через запуск внешнего интерфейса такой есть? Или там еще имя компоненты? Да и регистр может быть важен
ЕСТЬ БЕЗ КОМПОНЕНТЫ РЕГИСТР ТОТЖЕ
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

galover писал(а):а служба galsrv запущена? Класс 2C4CF260-DAA2-11d5-A29D-00204CE40998 зареген?
запущен
этот есть 2C4CF260-DAA2-11d5-A29D-00204CE40998
а того нет
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

а да, еще
CreateObject("AtlExec.App")
вместо
CreateObject("Galnet.App")
ну и регить нужно именно atlexec
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

edward_K писал(а):а да, еще
CreateObject("AtlExec.App")
вместо
CreateObject("Galnet.App")
ну и регить нужно именно atlexec
это само собой... что AtlExec.App
метод Execvip работает а вот LoadVip нефига
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

galover
Вот пробую твой пример
Вот сам vip
Код:

//IUsers.vih
#component "Utils"

objInterface IUsers;
public procedure SendMessageToActiveUsers(msg : string);
end;

vipInterface Users implements IUsers;

// Users.vip
#include IUsers.vih

#component "Utils"

interface Users;
create view
as select
Sessions.SessionId
from
x$ActiveUsers Sessions;

public procedure SendMessageToActiveUsers(msg : string);
{
_loop Sessions
{
SendMessageToSession(Sessions.SessionID, msg);
}
}
end.

Компилим, подключаем. Получаем COM wrapper (сделал по аналогии с примером для web сервисов, сначала atlidl.exe натравляем на res получаем idl файл, который скармливаем midl.exe...).
C#
Код:

using System;
using AtlantisComDrvLib;
using UTILSLib;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
IAtlantisAppSrv pIAtlantisApp = new AtlantisApplicationComponentClass();

pIAtlantisApp.Connect("GalUser", "Password");

var ss = (IUsers)pIAtlantisApp.LoadVip("Utils::Users");

ss.SendMessageToActiveUsers("Всем выйти из Галактики!");

GC.Collect();
GC.SuppressFinalize(pIAtlantisApp);
GC.Collect();
}
}
}
умирает вот здесь
IAtlantisAppSrv pIAtlantisApp = new AtlantisApplicationComponentClass();
Ответить