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