Главная страница
    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.45 MB
Время: 0.062 c
14-1081886422
Verg
2004-04-14 00:00
2004.04.11
Поздравить хочу.


1-1082729025
Ivolg
2004-04-23 18:03
2004.04.11
Сменить обои


1-1080175040
LoMaster
2004-03-25 03:37
2004.04.11
программа, удаляющая сама себя


3-1079084140
Nikolai_S
2004-03-12 12:35
2004.04.11
Добавление полей типа fkCalculated к открытой TADOQuery


1-1082739764
Alex-21
2004-04-23 21:02
2004.04.11
TImage & TImageList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский