Главная страница
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.03 c
3-1079506852
ГАГН
2004-03-17 10:00
2004.04.11
Memo в Fast Report е ?


11-1065951758
Revolter
2003-10-12 13:42
2004.04.11
прозрачность


1-1082467091
siriusP
2004-04-20 17:18
2004.04.11
Вопрос по созданию компонент.


3-1081744611
Bizon
2004-04-12 08:36
2004.04.11
Checkbox в DBGride


4-1079608687
boa
2004-03-18 14:18
2004.04.11
Как программно узнать, что сервер НТ является терминал-сервером?