Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Решение проблемы передачи данных между COM-сервером на Delphi и клиентом на C#

Delphi , Технологии , COM и DCOM

Решение проблемы передачи данных между COM-сервером на Delphi и клиентом на C

Пользователь столкнулся с проблемой, при которой COM-клиент на C# некорректно получал возвращаемые значения от COM-сервера, созданного на Delphi. Проблема заключалась в том, что при вызове методов EchoInt, EchoDouble и EchoString возвращаемые значения были корректными только для типа int. Для типов double и string клиент получал некорректные значения (NaN и ошибка выполнения соответственно).

Подтвержденный ответ

Проблема была решена после изменения типа возвращаемого значения метода EchoString с LPWSTR на BSTR. В Delphi для работы с строками в COM-объектах используется тип BSTR, который является управляемым и освобождается автоматически клиентом. Это означает, что при возврате строки из метода COM-сервера, необходимо использовать BSTR, а не обычный указатель на символы (LPWSTR).

Пример кода на Object Pascal (Delphi)

function TTest.EchoString(s: PWideChar): BSTR; stdcall;
begin
  writeln('[string] Delphi receives: ', s);
  SetLength(Result, Length(s) * SizeOf(WideChar) + SizeOf(WideChar));
  StrCopy(Result, s);
end;

В данном примере кода создается новый BSTR с копией переданной строки s. Важно отметить, что BSTR должен быть освобожден клиентом, поэтому Delphi не должен освобождать его внутри метода.

Альтернативный ответ

Попытка использовать safecall вместо stdcall привела к решению проблемы, но это было следствием изменения типа возвращаемой строки, а не самого вызова. Также было отмечено, что использование LPWSTR как типа возвращаемой строки может привести к утечке памяти или неопределенному поведению, так как управление памятью остается на стороне клиента.

Заключение

При работе с COM-серверами на Delphi важно правильно обрабатывать строки, используя тип BSTR. Это позволяет клиентам, написанным на других языках, корректно получать и освобождать строки, возвращаемые из методов COM-сервера.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с проблемой некорректной передачи данных между COM-сервером, написанным на Delphi, и клиентом на C#, связанной с неправильной обработкой возвращаемых строк.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: COM и DCOM ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 01:38:33/0.0032260417938232/0