Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Padeg.dll и Delphi XE, Непонятная кодировка текста на выходе 
:(
    Опции темы
BDmV
  Дата 5.3.2012, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: нет
Всего: 1



На WinXP SP3, Rad Studio XE после компиляции проекта, padeg.dll стала возвращать перекорёженные слова.
Например Пупкин Иван Ивановичь на выходе получается "упки= ва= вановиg" вместо "Пупкину Ивану Ивановичу"
Что я делаю не так? Или padeg.dll версии 3.3 просто выдаёт текст в какой-то своей кодировке  как тогда получить нормальный перевод?
Пример кода:

Код

unit Unit2;

interface

uses
  Windows, Forms, Controls, StdCtrls, Classes, SysUtils;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DllHandle : HMODULE;
  GetFIOPadeg   : function (pLastName, pFirstName, pMiddleName: PChar;
                           bSex: Boolean; nPadeg: LongInt; pResult: PChar;
                           var nLen: LongInt): Integer; stdcall;

  Form2: TForm2;
  Sex:boolean;
  nLen:LongInt;
  pResult:PChar;
  pVar:integer;
  FPadeg:Boolean;
  Fio,nName,SName:string;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
   Fio:='Пупкин';
   nName:='Иван';
   SName:='Иванович';
end;

procedure TForm2.FormShow(Sender: TObject);
begin
   Label1.Caption:=Fio;
   Label2.Caption:=nName;
   Label3.Caption:=SName;
   Sex:=True;
   if Assigned(GetFIOPadeg) then
     begin
       nLen := Length(FIO)+10;
       pResult:=StrAlloc(nLen);
       try
          pVar:=GetFIOPadeg(PChar(Fio),'','',Sex,3, pResult, nLen);
          Label4.Caption:=pResult;
       finally
          StrDispose(pResult);
       end;
       nLen := Length(nName)+10;
       pResult:=StrAlloc(nLen);
       try
         GetFIOPadeg('',PChar(nName),'',Sex,3, pResult, nLen);
         Label5.Caption:=pResult;
       finally
          StrDispose(pResult);
       end;
       nLen := Length(sName)+10;
       pResult:=StrAlloc(nLen);
       try
         GetFIOPadeg('','',PChar(SName),Sex,3, pResult, nLen);
         Label6.Caption:=pResult;
       finally
          StrDispose(pResult);
       end;
     end;
   if Sex then
     Label7.Caption:='Муж.'
   else
     Label7.Caption:='Жен.';
end;

initialization
  DllHandle := LoadLibrary('padeg.dll');
  FPadeg:=True;
  if DllHandle <> 0 then
    Begin
      @GetFIOPadeg := GetProcAddress(DllHandle, 'GetFIOPadeg');
    end
  else
    FPadeg:=False;
finalization
  FreeLibrary(DllHandle);
end.
end.

PM MAIL   Вверх
northener
Дата 5.3.2012, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



А вы уверены что сия dll умеет работать с юникодом?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
BDmV
Дата 5.3.2012, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: нет
Всего: 1



Цитата(northener @ 5.3.2012,  15:01)
А вы уверены что сия dll умеет работать с юникодом?

Нет не уверен.
Последний раз я её пользовал на WinXP SP3, Delphi 2007 проблем тогда небыло. Сейчас решил немного доработать прогу и упёрся... :(

А как тогда сформировать строку, чтоб сия dll её обработала не перекорёжив?

Это сообщение отредактировал(а) BDmV - 5.3.2012, 15:12
PM MAIL   Вверх
northener
Дата 5.3.2012, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



В Д2009+, к которым относится и ХЕ PChar это PWideChar.
Попробуйте описать функцию так:
Код

GetFIOPadeg   : function (pLastName, pFirstName, pMiddleName: PAnsiChar;
                           bSex: Boolean; nPadeg: LongInt; pResult: PAnsiChar;
                           var nLen: LongInt): Integer; stdcall;


И везде в коде заменить PChar на  PAnsiChar. А String на AnsiString;

Это сообщение отредактировал(а) northener - 5.3.2012, 15:26


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
BDmV
Дата 5.3.2012, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 14.5.2005

Репутация: нет
Всего: 1



Пробывал. Не помогает.
Даже вообще Русские буквы пропадают. :(

Даже пробыва менять в реестре HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\1252  менял с c_1251.nls на c_1251.nls
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0980 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.