Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Глюки при создании COM-клиента   Найти похожие ветки 

 
Tack83   (2004-03-24 01:19) [0]

Windows 98, Delphi 6, VCL, COM<br/><br/>Здравствуйте.<br/>Вопрос по созданию COM-клиента.<br/><br/>Мне нужно создать простенький COM-клиент, который получает с сервера массив данных типа VARIANT. <br/>Вот фрагмент TLB-файла, импортированного с помощью &quot;Import Type Library...&quot; из готового IDL-файла:<br/><br/>type<br/> &#xA0;bdat1 = packed record &#xA0;// Дескриптор таблицы данных<br/> &#xA0; &#xA0;day: Byte;<br/> &#xA0; &#xA0;month: Byte;<br/> &#xA0; &#xA0;session: Byte;<br/> &#xA0; &#xA0;year: SYSINT;<br/> &#xA0; &#xA0;t_name: OleVariant;<br/> &#xA0;end;<br/> <br/> &#xA0;IVBRemServer = interface(IUnknown)<br/> &#xA0; &#xA0;[&quot;{C4A6CCAD-398C-11D8-B795-A1F3DD0BB402}&quot;]<br/> &#xA0; &#xA0;function &#xA0;OpenRst(out success: Integer): HResult; stdcall;<br/> &#xA0; &#xA0;function &#xA0;FreeServ(out success: Integer): HResult; stdcall;<br/> &#xA0; &#xA0;function &#xA0;VBIsTableExist(t_name: PChar; out exist: Integer): HResult; stdcall;<br/> &#xA0; &#xA0;function &#xA0;VBGetDataDim(var pDat: bdat1; fields: PChar; out rows: SYSINT; out cols: SYSINT): HResult; stdcall;<br/> &#xA0; &#xA0;function &#xA0;VBGetData(total: SYSINT; out pArr: OleVariant): HResult; stdcall;<br/> &#xA0; &#xA0;function &#xA0;VBGetSystemDir(out sys_dir: WideString): HResult; stdcall;<br/> &#xA0;end;<br/><br/>НА &quot;VISUAL C++ 6.0&quot; РАБОТАЛ - ВСЕ БЫЛО НОРМАЛЬНО. ПЕРЕШЕЛ НА DELPHI - ГЛЮКИ. :-(<br/><br/>Последовательность действий.<br/>1. Создаю объект ко-класса:<br/><br/>var<br/> &#xA0;res: Integer;<br/> &#xA0;TabDesc: bdat1;<br/> &#xA0;sFields: PChar;<br/> &#xA0;Rows, Cols: Integer;<br/> &#xA0;Serv: IVBRemServer;<br/>.......<br/><br/>begin<br/> &#xA0;Serv := CoVBRemServer.Create;<br/><br/>.......<br/><br/>end;<br/><br/>2. Выполняю специфические действия подготовки выборки данных.<br/><br/>Serv.OpenRst(res); // - сработало нормально.<br/><br/>3. Выполняю вызов функции получения размеров данных - ГЛЮКИ...<br/><br/>// Заполняю дескриптор таблицы для выборки<br/>TabDesc.t_name := &quot;table1&quot;;<br/>TabDesc.day := 22;<br/>TabDesc.month := 3;<br/>TabDesc.year := 2004;<br/>TabDesc.session := 3;<br/><br/>sFields := &quot;*&quot;; // Выборка производится по всем полям тяблицы<br/><br/>// Пытаюсь получить размер буфера данных для выборки<br/>// Через Rows, Cols должны возвращаться размеры таблицы<br/>Serv.VBGetDataDim(TabDesc, sFields, Rows, Cols); <br/><br/>- вывелось сообщение об ошибке &quot;EAccessViolation in module OLEAUT32.DLL&quot;<br/><br/>Запускаю на той же машине аналогичную программу на С++ - все работает!<br/><br/>Может, я что-то напутал с передачей параметров? Или дело в типе SYSINT ?<br/>Помогите, пожалуйста!


 
Digitman ©   (2004-03-24 08:36) [1]

вроде бы все правильно... SYSINT - это тот же INTEGER ..<br/><br/>1. параметр sFields: PChar точно [in]-параметр ?<br/>2. приведи дословно сообщение об исключение



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.73 MB
Время: 0.043 c
4-1079255619
Tack83
2004-03-14 12:13
2004.04.11
CheckBox - крестиком


14-1082010147
d'aron
2004-04-15 10:22
2004.04.11
WORK? WORK! Some work in Moscow//


14-1079322357
Rouse_
2004-03-15 06:45
2004.04.11
C Днем Рождения 15 Марта


1-1082816283
jiurasic
2004-04-24 18:18
2004.04.11
Как работать с неизвестным типом данных?


14-1082021325
Stas
2004-04-15 13:28
2004.04.11
QNX система работающая в реальном времени