Конференция "Corba" » Некорректно принимается SAFEARRAY в метод сервера
 
  • АндрейНТ (30.04.08 14:05) [0]
    Добрый день всем. У меня есть сервер на VC++ и клиент на Дельфи.
    При вызове из клиента метода еще до входа в него (метод) получаю сообщение что параметр некорректный.
    1. Вот объявление метода на idl:

    HRESULT GetConfig( [in, out] SAFEARRAY(struct ConfigDataChannels) *UnitsConfig)      



    2. Вот что получилось после импортирования библиотеки типов в Дельфи:

    procedure GetConfig(var UnitsConfig: PSafeArray); safecall;



    Структура, являющаяся параметром, в idl файле объявлена, есть клиент на С++, который отлично работает:

    SAFEARRAY *ChCfg;

    CP->GetConfig(&ChCfg);  

    long lBound, uBound;
    SafeArrayGetLBound(ChCfg, 1, &lBound);
    SafeArrayGetUBound(ChCfg, 1, &uBound);

    ConfigDataChannels *pChCfg;
    hr = SafeArrayAccessData(ChCfg, (PVOID*)&pChCfg);
    for (int i=lBound; i<uBound; i++)
    {
      CString st = CString(pChCfg[i].State);
      short PickupTx = pChCfg[i].PickupTx;
    }

    SafeArrayUnaccessData(ChCfg);
    SafeArrayDestroy(ChCfg);



    Вот... А мне нужно аналогично сделать на Дельфи, но при вызове метода происходит сбой.

    var
      ChannelsConfig: PSafeArray;
      LBound, UBound: Longint;
      pChCfgData: Pointer;
    begin
      Server := CreateComObject(ProgIdToClassId('CP.Compact.1')) as IComCP;
      if ( Server <> nil ) then
      begin
        Server.GetConfig(ChannelsConfig);


    Дельфи ведь понимает SafeArray, почему тогда параметр некорректный?
  • Сергей М. © (30.04.08 14:30) [1]
    Ты уж определись, то ли у тебя ошибка времени компиляции, то ди времени выполнения ..

    Как дословно выглядит сообщение об "ошибке" ?
  • ага (01.05.08 11:34) [2]
    Здеся
    HRESULT GetConfig( [in, out] SAFEARRAY(struct ConfigDataChannels) *UnitsConfig)
    указатель на SafeArray. А здеся
    procedure GetConfig(var UnitsConfig: PSafeArray); safecall;
    указатель на указатель на SafeArray. Ага?
 
Конференция "Corba" » Некорректно принимается SAFEARRAY в метод сервера
Есть новые Нет новых   [120350   +20][b:0][p:0.001]