Главная страница
    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.04 c
9-1070123297
AxxxE
2003-11-29 19:28
2004.04.11
Collision в 3D


7-1080119578
Начинающий веб-дизайнер
2004-03-24 12:12
2004.04.11
Программное извлечение диска.


8-1076941731
kopcap
2004-02-16 17:28
2004.04.11
Как быстрее выводить спрайт


4-1075757030
Gogi
2004-02-03 00:23
2004.04.11
Список окон и всплывающие подсказки (hint)


3-1078997825
Asduk
2004-03-11 12:37
2004.04.11
Как в QR отключить при печати показ окна процесса печати?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский