WideString и вызов OLE функции
От: __qt__  
Дата: 23.10.06 12:01
Оценка:
Здравствуйте.

Скажу сразу, на Delphi пытаюсь программировать второй день.
Проблема в следующем: имеется OLE-объект, написанный на С++.

OLE-объект экспортирует интерфейс, содержащий такую функцию:

HRESULT PrintLabel([in] BYTE bVersionNumber, [in] BSTR bstrData, [out,retval] SHORT *pResult);

в Delphi при импорте библиотеки типов получаем такую строчку

function PrintLabel(bVersionNumber: Byte; const bstrData: WideString): Smallint; safecall;

Вроде бы всё нормально, но ...

есть такой код на Delphi:

procedure TForm1.Button1Click(Sender: TObject);
var
Data : WideString;
Obj : variant:

begin

try
Obj := CreateoleObject('AutoTransportRMI.AztecObject');
Data := 'sdjkfjshgfmxbcvmxnbjehgrtjhgj jhsgfhsdgfjgs djfg';
Obj.PrintLabel( 1, Data );

except
on E: Exception do begin
MessageBox(handle, PChar('OLE-object error: '+E.Message), 'Error', MB_ICONERROR or MB_OK);
Exit;
end;
end;
end;


Во время выполнения PrintLabel возникает ошибка EOleSysError "Несовпадение типов".
При этом, если изменить
Data := 'sdjkfjshgfmxbcvmxnbjehgrtjhgj jhsgfhsdgfjgs djfg';
Obj.PrintLabel( 1, Data ) );
на
Obj.PrintLabel( 1, 'sdjkfjshgfmxbcvmxnbjehgrtjhgj jhsgfhsdgfjgs djfg' );
всё корректно отрабатывает.

Если я меняю BSTR на BSTR* в OLE-функции, т.е.

HRESULT PrintLabel([in] BYTE bVersionNumber, [in] BSTR* pbstrData, [out,retval] SHORT *pResult);

тоже всё хорошо работает.

Такие проблемы со всеми функциями, содержащих BSTR в качестве входного параметра.

Вопрос, что я делаю неправильно. Поиск ответа в интернете в течении двух дней ответа не принес
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.