Текущий архив: 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.45 MB
Время: 0.04 c