COM InProcServer для MSSQL

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

COM InProcServer для MSSQL

Сообщение WadimZapara »

Задача: создать COM-объект на клаше (в DLL) для оперирования через него с DAT-файлами клариона из MSSQL-сервера.
---среда C55ee ---
Прочёл статью Михаила (спасибо, ДП).
Пример Math вызвал некоторые сложности. А именно, на экспортируемую DllCanUnloadNow() компоновщик ругается, будто она дважды объявлена в проекте (делаю через prj).
Вышел из положения, обозвав её DllCanUnloadNoV (проект стал собираться) и подправляя бинарным редактором в готовой DLL имя процедуры.
В системе регистрируется и де-регистрируется с помощью regsvr32.
Тест обращения из клары не писал, попробовал обратиться из из Excel (VB).
Объект не доступен.

Вопросы:
1. Это связано с необходимостью реализации IDispath - интерфейса ?
2. Значит, то же будет и при попытке обращения из MSSQL ?
3. Но тогда нужна и TLB-библиотека ? Как / чем её создать ?
4. Не решал ли кто подобную задачу ?

Помогите...
Последний раз редактировалось WadimZapara 08 Февраль 2012, 21:59, всего редактировалось 1 раз.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: COM InProcSever для MSSQL

Сообщение Дед Пахом »

Скачай мой EasyCOMCreator, он и IDispatch поддерживает, и tlb создаёт, и сразу типы регистрирует, и условно бесплатный.
За C55 не скажу, на нем комки создавать не пробовал.
С уважением, ДП
seawolf
Старожил
Сообщения: 213
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Re: COM InProcSever для MSSQL

Сообщение seawolf »

Тот пример про который пишут - делался под C6. Там он собирается без проблем, но при попытках вызвать из Net, C++ мои коллеги жаловались что тут что-то не так (не импортиться)
EasyCom creator я после этого опробовал, то что на нем было сделано без проблем подключилось к С++. Далее я проверил что и из программ сделанных на C6 все более -ли менее рвботает (даже через OLE contol недавно я пост сделал про вызовы окошек) Более глубоко не копал пока нет необходимости но видимо технология вполне рабочая.
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcSever для MSSQL

Сообщение WadimZapara »

Спасибо, Михаил! EasyCOMCreator - это сила, респект!

Тестовый Math под C55 заработал после недолгих танцев с бубном.
А именно:
1) исключение строки INCLUDE('cwutil.inc'),ONCE
2) собственное определение процедур LONGTOHEX (? N), String -И- PathSplit (String FileName, <*CString FileDrive>, <*CString FileDir>, <*CString SmallName>), Byte
3) изменение логики вызова PUTREG, так как в C55ee она возвращает TRUE/FALSE = успех/неудача
4) подключение Equates.clw, Builtins.clw, svapi.inc, svcomdef.inc, winerr.inc из LibSrc от C6
5) самое интересное:
проведение компиляции, сборки со строкой DllCanUnloadNow(),HRESULT,PASCAL, Name('DllCanUnloadNoV') и, соответственно в EXP-файле DllCanUnloadNoV
а затем, редактирование готовой DLL бинарным редактором с превращением DllCanUnloadNoV в DllCanUnloadNow

Из Excel-а окейно работает.
Но вот необходимость пункта 5 вводит в транс.
И вопрос "почему не собирается с именем DllCanUnloadNow с выдачей сообщения об ошибке повторного использования этого имени" остаётся открытым.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: COM InProcSever для MSSQL

Сообщение Дед Пахом »

Попробуй выкинуть DllCanUnloadNow из .exp файла, может прокатит?
С уважением, ДП
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcSever для MSSQL

Сообщение WadimZapara »

ды конечно, катит.
так я и танцую с бин.редактором, чтоб функциональность не потерять.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: COM InProcSever для MSSQL

Сообщение Дед Пахом »

Можно ещё из win32.lib выкинуть.
С уважением, ДП
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcSever для MSSQL

Сообщение WadimZapara »

Дед Пахом писал(а):Можно ещё из win32.lib выкинуть.
способ ?
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: COM InProcSever для MSSQL

Сообщение Дед Пахом »

Ну аккуратненько так в блокноте стереть всё ненужное :-)
В принципе можно, наверно, подсунуть win32.lib от 6-ки/7-ки/8=ки
С уважением, ДП
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcSever для MSSQL

Сообщение WadimZapara »

подмена на 6-кину либу не прокатила
в смысле - итог тот же самый
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcServer для MSSQL

Сообщение WadimZapara »

то, что выше - не проблема, сделал заменялку имени в DLL-ке.

Дальше - всё гораздо хужеватее:

/ DLL с комом регистрируется в системе, из Excel объект создаётся, методы вызываются. /

В реализацию интерфейса COM включена переменная, ну скажем, XVar, инициализацию провожу в CONSTRUCT.
После создания объекта (CreateObject) вызываю метод без параметров, который возвращает значение переменной XVar.
Не могу объяснить себе - почему в XVar вижу мусор.

C55ee.
ЗЫ: может нужны mutex, critical section ?
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: COM InProcServer для MSSQL

Сообщение Дед Пахом »

Понаставь стопов в каждый метод, дабы убедиться, что всё вызывается. Проверь заодно прагмы проекта:
#pragma define(_SVDllMode_=>0)
#pragma define(_SVLinkMode_=>1)
#pragma define(_ABCLinkMode_=>1)
и объявление
locCOMIniter CCOMIniter
это автоматом вызывает CoInitialize() в конструкторе.
С уважением, ДП
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcServer для MSSQL

Сообщение WadimZapara »

Дед Пахом писал(а): locCOMIniter CCOMIniter
это автоматом вызывает CoInitialize() в конструкторе.
автоматом вызвало только "Illegal data type CCOMINITER"
где он описан ?

ЗЫ: C55ee - проект Legacy
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3143
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 11 раз
Поблагодарили: 32 раза
Контактная информация:

Re: COM InProcServer для MSSQL

Сообщение Дед Пахом »

Объявлен в svcom.inc
С уважением, ДП
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: COM InProcServer для MSSQL

Сообщение WadimZapara »

скомпилировалось
пока не катит

да и ещё: в момент, когда в Excel-е выполняется операция OBJ = Nothing - Excel падает с кодом исключения 5, указывая, что ошибка произошла в модуле c55runx.dll
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить