Юзаю embarcadero delphi xe3
вот собственно код:
unit COMSafeArray;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ActiveX, StdCtrls, ComObj;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
DDSCSArrayBound: array[0..0] of TSafeArrayBound;//^SAFEARRAYBOUND;
DDSCSArray: PSafeArray;//array of Variant;//
DDServerID: TGUID;//OleVariant;//THandle;
DDServer: OleVariant;//THandle;
DDServerConnected: boolean;
ErrorDDServer: integer;
ErrorDDServerText: string;
begin
if DDServerConnected = False then begin
DDServer := CreateOleObject('DSCom.DSComObj');
ErrorDDServer := 13;
DDServerConnected := True;
ErrorDDServer := DDServer.DDSInit('pos375-b98','9750','rarus');
end;
if DDServerConnected = True then begin
if ErrorDDServer = 0 then begin
ErrorDDServerText := '';
DDSCSArrayBound[0].cElements := 1;
DDSCSArrayBound[0].lLbound := 0;
DDSCSArray := SafeArrayCreate(VT_ARRAY,1,DDSCSArrayBound);
while ErrorDDServer <> 1111 do begin
ErrorDDServer := DDServer.DDSExecute('GetVersion',DDSCSArray,ErrorDDServerText);
end;
ShowMessage('Депозитный сервер подключен: ' + IntToStr(ErrorDDServer));
end;
end;
end;
end.
описание компоненты:
Синтаксис:
DDSInit (Parameters: IPaddress, Port : string, Password: string): Integer
Описание:
Запускает отдельный фоновый процесс контроля соединения с депозитно-дисконтным сервером
Параметры:
IPaddress – строка, входной параметр содержащий имя компьютера или IP-адрес, где запущен депозитно дисконтный сервис. Примеры: “SERVER123” или “172.16.1.101”
Port – строка, входной параметр, содержащий номер TCP-порта, на котором принимает входящие запросы депозитно-дисконтный сервер. (По умолчанию “9750”)
Password – строка, с паролем подключения к серверу.
Примечание: если пароль указан неверно, то этот метод не возвращает ошибку. Вместо этого ошибку 142 будет возвращать метод DDSExecute при любом своем вызове.
Возвращаемое значение:
0 – метод выполнен успешно, иначе – код ошибки (см. раздел 4 данного документа)
Внимание! Возврат нулевого значения означает лишь успешный запуск фонового процесса, а не факт успешной установки соединения с депозитно-дисконтным сервером. Реальная установка соединения может произойти позднее (через несколько секунд), поэтому данный метод следует вызывать заранее (например, при запуске/инициализации программы), за некоторое время до первых попыток взаимодействия с депозитно-дисконтным сервером (см. описание DDSExecute)
-------------------------------------
Синтаксис:
DDSExecute (MethodName: string; var Params: OleVariant; var oResDescription: String): Integer
Описание:
Запрашивает выполнение метода депозитно-дисконтного сервера и возвращает результаты его исполнения.
Параметры:
MethodName – строка, входной параметр, содержащий любое имя метода депозитного сервера из раздела 3 данного документа. Например “GetVersion”
Params – COMsafeArray структура, при вызове должна содержать входные параметры вызываемого метода согласно его описанию (см. гл 3 данного документа).
При успешном исполнении метода, в данном параметре содержится COMsafeArray структура с возвратными параметрами метода согласно его описанию (см. гл 3 данного документа)
oResDescription – строка, возвратный параметр. Содержит текстовое описание результата обращения к депозитно-дисконтному серверу.
Возвращаемое значение:
0 – метод выполнен успешно, иначе – код ошибки (см. раздел 4 данного документа)
--------------------------------------
Синтаксис:
GetVersion (Parameters: SafeArray): Integer
Описание:
Получение версии сервера.
Параметры:
Parameters: SafeArray (входной)
Не используется.
Parameters: SafeArray (выходной)
Используется. Описание ниже.
Возвращаемое значение:
0 – метод выполнен успешно, иначе – код ошибки
Массив Parameters (выходной)
SafeArray
Индекс Имя Тип Описание
0 Version Строка Версия сервера. Например «1.1.0»
Есть пример на 1С:
ОбъектСвязиССервером = Новый COMОбъект("DSCom.DSComObj");
Если КодОшибки <> 0 Тогда
Сообщить(“Объект взаимодействия с депозитным сервером вернул ошибку с кодом: ” + КодОшибки);
Возврат;
КонецЕсли;
ТекстОшибки = ””; // Сюда получим текст ошибки
// Создадим SafeArray для передачи параметров
SafeArrayПараметры = Новый COMSafeArray("VT_VARIANT", 1); // один параметр у GetVesion
// Вызываем…
Повторять
КодОшибки = ОбъектСвязиССервером.DDSExecute("GetVersion", SafeArrayПараметры, ТекстОшибки);
Пока КодОшибки<>1111 Конец; // код 1111 – это связь с сервером в процессе установления, нужно подождать до успешного результата или до ошибки
Пытаюсь реализовать на Delphi и получаю постоянно ошибку:
[DCC Error] COMSafeArray.pas(50): E2160 Type not allowed in OLE Automation call строка где
ErrorDDServer := DDServer.DDSExecute('GetVersion',DDSCSArray,ErrorDDServerText);
Вообщем нид хелп.... Бодаюсь второй день что не так делаю понять не могу.