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

Вниз

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

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

Windows 98, Delphi 6, VCL, COM

Здравствуйте.
Вопрос по созданию COM-клиента.

Мне нужно создать простенький COM-клиент, который получает с сервера массив данных типа VARIANT.
Вот фрагмент TLB-файла, импортированного с помощью "Import Type Library..." из готового IDL-файла:

type
 bdat1 = packed record  // Дескриптор таблицы данных
   day: Byte;
   month: Byte;
   session: Byte;
   year: SYSINT;
   t_name: OleVariant;
 end;

 IVBRemServer = interface(IUnknown)
   ["{C4A6CCAD-398C-11D8-B795-A1F3DD0BB402}"]
   function  OpenRst(out success: Integer): HResult; stdcall;
   function  FreeServ(out success: Integer): HResult; stdcall;
   function  VBIsTableExist(t_name: PChar; out exist: Integer): HResult; stdcall;
   function  VBGetDataDim(var pDat: bdat1; fields: PChar; out rows: SYSINT; out cols: SYSINT): HResult; stdcall;
   function  VBGetData(total: SYSINT; out pArr: OleVariant): HResult; stdcall;
   function  VBGetSystemDir(out sys_dir: WideString): HResult; stdcall;
 end;

НА "VISUAL C++ 6.0" РАБОТАЛ - ВСЕ БЫЛО НОРМАЛЬНО. ПЕРЕШЕЛ НА DELPHI - ГЛЮКИ. :-(

Последовательность действий.
1. Создаю объект ко-класса:

var
 res: Integer;
 TabDesc: bdat1;
 sFields: PChar;
 Rows, Cols: Integer;
 Serv: IVBRemServer;
.......

begin
 Serv := CoVBRemServer.Create;

.......

end;

2. Выполняю специфические действия подготовки выборки данных.

Serv.OpenRst(res); // - сработало нормально.

3. Выполняю вызов функции получения размеров данных - ГЛЮКИ...

// Заполняю дескриптор таблицы для выборки
TabDesc.t_name := "table1";
TabDesc.day := 22;
TabDesc.month := 3;
TabDesc.year := 2004;
TabDesc.session := 3;

sFields := "*"; // Выборка производится по всем полям тяблицы

// Пытаюсь получить размер буфера данных для выборки
// Через Rows, Cols должны возвращаться размеры таблицы
Serv.VBGetDataDim(TabDesc, sFields, Rows, Cols);

- вывелось сообщение об ошибке "EAccessViolation in module OLEAUT32.DLL"

Запускаю на той же машине аналогичную программу на С++ - все работает!

Может, я что-то напутал с передачей параметров? Или дело в типе SYSINT ?
Помогите, пожалуйста!


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

вроде бы все правильно... SYSINT - это тот же INTEGER ..

1. параметр sFields: PChar точно [in]-параметр ?
2. приведи дословно сообщение об исключение



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

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

Наверх




Память: 0.47 MB
Время: 0.071 c
14-1082335734
Мазут Береговой
2004-04-19 04:48
2004.04.11
Если бы при приеме на работу к водителям относились так же, как к


6-1075285004
ZioN
2004-01-28 13:16
2004.04.11
Как открывать новые окна моим браузером?


14-1079687258
TUser
2004-03-19 12:07
2004.04.11
CBuilder


6-1076056608
Leech
2004-02-06 11:36
2004.04.11
Установка dial-up соединения...


8-1072194231
Kein
2003-12-23 18:43
2004.04.11
Описание графических форматов