Не могу понять где ошибка.
Конфигурация ПО такова: Win2000, GraphWorX32 8.04, Delphi 5.
После импорта библиотеки типов из OPCDAAutomation.dll,
получено такое описание:
OPCItems = interface(IDispatch)
['{28E68F98-8D75-11D1-8DC3-3C302A000000}']
procedure AddItems(NumItems: Integer;
var ItemIDs: PSafeArray; var ClientHandles: PSafeArray;
out ServerHandles: PSafeArray; out Errors: PSafeArray;
RequestedDataTypes: OleVariant; AccessPaths: OleVariant); safecall;
Часть кода программы:
type
SArray = ^STRArray;
STRArray = Array [1..500] of WideString;
IArray = ^INTArray;
INTArray = Array [1..500] of Integer;
TfmMain = class(TForm)
...
private
ItemIDs: PSafeArray;
ClientHwnd: PSafeArray;
ServerHwnd: PSafeArray;
Errors: PSafeArray;
ReqDataType: OleVariant;
AccPaths: OleVariant;
ItemIDsHWND: pointer;
ClientHwndHWND: pointer;
HR: HWND;
...
procedure TfmMain.initSRV;
begin
try
OPCServer1:=TOPCServer.Create(self);
OPCServer1.Connect1('ELESY.OPCINTERCOM', OPCsrvMashine);
OPCgroup1:=TOPCgroup.Create(OPCServer1);
OPCgroup1.OnDataChange:=opcDataChange;
OPCgroup1.ConnectTo(OPCServer1.OPCGroups.Add('Hydrouklon'));
OPCgroup1.ClientHandle:=1;
OPCgroup1.IsSubscribed:=True;
except
MessageDlg('Ошибка, при создании OPC клиента.', mtError, [mbOK],0);
TerminateSRV;
end;
end;
procedure TfmMain.LoadProfileFromINI(var ListTag: TStringList);
begin
ItemIDs := SafeArrayCreateVector (VT_BSTR, 0, 1);
ClientHwnd := SafeArrayCreateVector (VT_I4, 0, 1);
HR:=SafeArrayAccessData (ItemIDs, ItemIDsHWND);
HR:=SafeArrayAccessData (ClientHwnd, ClientHwndHWND);
SArray(ItemIDsHWND)[cnt_Point]:='tag1';
IArray(ClientHwndHWND)[cnt_Point]:=i;
HR:=SafeArrayUnaccessData (ItemIDs);
HR:=SafeArrayUnaccessData (ClientHwnd);
OPCgroup1.OPCItems.AddItems(1, ItemIDs, ClientHwnd, ServerHwnd, Errors, ReqDataType, AccPaths);
end;
При выполнении процедуры AddItems, выдается ошибка 80070057 "Parameter is incorrect". Причем если программа выполняется под WinXP, все работает, без ошибок.