Главная страница
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.041 c
1-1082622321
Liona
2004-04-22 12:25
2004.04.11
создание модуля


1-1082278903
declik
2004-04-18 13:01
2004.04.11
Как остановить обработчик?


7-1080143283
IrBisoff
2004-03-24 18:48
2004.04.11
Не совсем трэй...


3-1081430589
Zn
2004-04-08 17:23
2004.04.11
Существует ли таблица с указанным именем в БД.


11-1068434085
azsd
2003-11-10 06:14
2004.04.11
ptWYSIWIG = ptWYSIWIGCustom?