Турецкие символы, излучаемые во время вызова COM-объекта Delphi 6 из .net - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть Delphi 6 COM DLL.у него есть метод, подобный dosomething (const LicenceName: Widestring);

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

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

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

1 Ответ

0 голосов
/ 30 ноября 2011

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

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

Существует два способа вызова функции COM, но вы не указали.

  1. Вызов с использованием вариантов OLE.

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

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

...