Турецкие символы, выпущенные при вызове Delphi 6 COM-объекта из.net

93
14

У меня есть dll delphi 6 COM. он имеет метод вроде dosomething (const LicenceName: Widestring);

когда я использую этот COM из.net csharp вроде: comdll.dosomething("ğüşiöçĞÜŞİÖÇ"), я получаю параметр licenceName в com dll как "güsiöçGÜSIÖÇ", какой-то турецкий персонаж исчезает.

что я должен сделать, чтобы правильно передать турецкие символы?

заранее спасибо

спросил(а) 2011-11-29T16:17:00+04:00 8 лет, 10 месяцев назад
1
Решение
99

Строковые типы Delphi 6 - это Ansi (один байт на символ). Тип COM "BSTR" и тип строки.NET являются исходным кодом Unicode UTF-16 (два байта на один кодовый номер юникода, большинство из которых соответствуют одному символу).

Если ваш COM-код функции в Delphi 6 использует WideString вместо строки, вы должны иметь возможность выполнять вызов COM-функции без проблем. В противном случае вы, возможно, попадаете в проблему конвертации кодовой страницы. Также можно преобразовать в турецкую кодовую страницу с ANSIString, но, на мой взгляд, такое преобразование происходит неявно в вашем коде, поэтому вы должны искать эти неявные преобразования и удалять неправильное использование String (AnsiString), заменяя типы с WideString.

Есть два способа, которыми вы могли бы выполнять свой вызов COM-функции, и вы не указали.

Вызов с использованием опций OLE.

var o: OleVariant; WS: WideString; begin o: = CreateOleObject ('NameThing.OtherThingName'); o.MethodName(WS); // это должно работать. Примечание: НЕ используйте тип STRING здесь, в Delphi 6. end;

Вызов с использованием встроенного COM с библиотекой типов. Подробная информация о том, как это сделать, зависит от ваших конкретных параметров функции. Вы не указали, есть ли у вас блок MyUnit_TLB.pas, но если вам нужно обновить вопрос и показать фактический метод, который вы вызываете.

ответил(а) 2011-11-30T17:47:00+04:00 8 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема