Добрый день всем. У меня есть сервер на 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++)
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, почему тогда параметр некорректный?