Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM + параметр типа Optional -> Проблема, COM + параметр типа Optional -> Проблема 
:(
    Опции темы
juicy_emad
Дата 18.3.2007, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 18.3.2007

Репутация: нет
Всего: нет



Приветствую. 
  Я занимаюсь созданием сервера COM. Переношу код из среды Delphi7. 
  Проблема: В этом проекте есть несколько функций, имеющих одно и тоже имя. Вот их прототипы: 
[pascal]
    constructor Create; overload;
    constructor Create(LayersNum: Byte; NeuronsNum: Word); overload;
    constructor Create(LayersNum: Byte; NeuronsNum: TDynArrayOfInteger); overload;
    constructor Create(LayersNum: Byte; NeuronsNum: TDynArrayOfInteger;
                                          SynapsesNum: TDynArrayOfInteger); overload;
    constructor Create(LayersNum: Byte; NeuronsNum: TDynArrayOfInteger;
                       SynapsesNum: TDynArrayOfInteger; DontInit: Bool); overload;
[/pascal]

  Насколько я понял, концепция COM не позволяет использование подобных перегруженых функций. Но, там есть тип необязательных параметров, под названием Optional (в книге написано, что параметры этого типа должны иметь тип smile Variant). Ну я так и сделал: 

   user posted image

Потом я делаю так (Код, просто, ради примера): 
[pascal]
procedure TTNet.Create(LayersNum, NeuronsNum_v: OleVariant;
  var NeuronsNum_a: OleVariant; SynapsesNum, DontInit: OleVariant);
begin
    Create(LayersCount, NeuronsCount);
end;
[/pascal]

  И получаю ошибку на строчке [pascal]Create(LayersCount, NeuronsCount);[/pascal]

> [Error] uMain.pas(42): Not enough actual parameters 

  Что я сделал не так? Где я ошибаюсь? Как мне решить проблему переноса вышеуказанных функций в сервер COM?

P.S.:

  Что-то я уже ничего не понимаю.  smile 
  В Delphi Help про это использование параметров типа Optional, написано так: 
> Optional - Optional parameter. The Parameter type must be VARIANT and all subsequent 
> parameters must also be optional. Note that when you import a method with optional 
> parameters, Delphi does not add default values to the interface. They are still optional, 
> however, and when you call them you can pass EmptyParam rather than supplying a value. 

  А именно: "when you call them you can pass EmptyParam". Вот я и пытаюсь понять, как это перевести: 

"когда вы вызываете их, вы _можете_ указывать EmptyParam" 

  или ... 
http://www.itword.net/modules/myarticles/a....php?storyid=98 
"При вызове методам можно передавать параметры «OLEVariant». Многие параметры, передаваемые методам Word, являются необязательными (optional). Необязательные параметры, тем не менее, должны быть включены в обращения к методам, но могут быть определены как неинициализированные (Unassigned), чтобы указать, что они не используются. Для неиспользуемых параметров можно использовать переменную Delphi 4 называемую EmptyParam." 
Т.е. получается, что: 

"когда вы вызываете их, вы _должны_ указывать EmptyParam" 

  Что делать-то? Как это можно понимать? Можно-ли в COM как-нибудь "проэмулировать" Overload функции из Delphi?

Это сообщение отредактировал(а) juicy_emad - 18.3.2007, 02:18
PM MAIL   Вверх
Romkin
Дата 20.3.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 14.11.2006
Где: Москва

Репутация: нет
Всего: 5



Переводи как "вы можете указать EmptyParam для обозначения отсутствующего значения" smile
optional - для позднего связывания. 
Тебе, увы, надо указывать все параметры, ставя EmptyParam для отсутствующих.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0823 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.