Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка пути в DLL


Grant ©   (2008-05-05 16:27:00) 

Всем привет. Есть приложение которое использует функцию из Dll.
В этой функции всего одна проверка:
 if DirectoryExists('C:\Projects\Antonф\') then
   ShowMessage('True')
Такой каталог реально существует. Но функция все равно возвращает False. Переименовываю каталог, убираю русскую букву ф - функция возвращает True. Если эту проверку делать не в Dll то и срусской буквой и без функция работает правильно. Где ошибка? Заранее спасибо.


Grant   (2008-05-05 17:54:00) [1]

Оба примера работают правильно. Спасибо за помощь. Буду дальше разбираться.


Игорь Шевченко   (2008-05-05 17:33:00) [2]

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 end;

var
 Form1: TForm1;

function PathCheck: Boolean; external 'PathCheckDll.dll' name 'MyPathCheck';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 if DirectoryExists('C:\Projectsф') then
   ShowMessage('true')
 else
   ShowMessage('false');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if PathCheck then
   ShowMessage('true')
 else
   ShowMessage('false');
end;

end.


library PathCheckDll;

uses
 SysUtils,
 Classes;

{$R *.res}

function MyPathCheck: Boolean;
begin
 Result := DirectoryExists('C:\Projectsф');
end;

exports
  MyPathCheck;

begin
end.


Palladin   (2008-05-05 17:28:00) [3]

DLL

library dll001;Uses SysUtils;Procedure cdd;Begin CreateDir('c:\testф\');End;exports cdd;end.

Project

Uses Windows;var h:THandle; p:Procedure; begin h:=LoadLibrary('dll001.dll'); @p:=GetProcAddress(h,'cdd'); p; FreeLibrary(h);end.

проверь...


Grant   (2008-05-05 17:22:00) [4]

1) Не ведутся
2) Русский
3) XP Proffesional Service Pack 2 Русская


Palladin   (2008-05-05 17:15:00) [5]


> Grant   (05.05.08 17:13) [13]

работы с LCID ведутся? какая по умолчанию кодировка для не Unicode? Windows локализированная или переведенная? Что за версия?


Grant   (2008-05-05 17:14:00) [6]

Если в простом exe то нормально, если в dll то все в дос кодировке.


Grant   (2008-05-05 17:13:00) [7]

В dll


Игорь Шевченко   (2008-05-05 17:11:00) [8]


> Если эту проверку делать не в Dll то и срусской буквой и
> без функция работает правильно.


А проверка делается в каком приложении ?


Grant   (2008-05-05 17:10:00) [9]

Это не консольное приложение.


Игорь Шевченко   (2008-05-05 17:08:00) [10]

у консольных приложений другая локаль.


Grant   (2008-05-05 17:05:00) [11]

Ок спасибо, буду разбираться.


Palladin   (2008-05-05 17:03:00) [12]

Из DLL


Grant   (2008-05-05 17:02:00) [13]

Из DLL?


Palladin   (2008-05-05 17:00:00) [14]

а я пишу - у меня с буквой ф создается...


Grant   (2008-05-05 16:53:00) [15]

Объясняю: пишу в DLL функцию - CreateDir('C:\Projects\Antonф\');
А каталог создается - C:\Projects\AntonЇ\ То есть последняя русская буква зашифрована. Если єту функцию віполнить из exe то буква не шибруется.


Palladin   (2008-05-05 16:47:00) [16]

эээ.... что значит "Зашифрован ные русские буквы в DOS кодировке" ? зачем они у тебя в "DOS кодировке" "зашифрован ны"?


Grant   (2008-05-05 16:46:00) [17]

Нет, не консольное. Зашифрованые русские буквы в DOS кодировке.


Palladin   (2008-05-05 16:44:00) [18]

приложение консольное?


Grant   (2008-05-05 16:43:00) [19]

Только что попробовал вместо DirectoryExists функцию CreateDir, так путь с русскими буквами создался не правильный, то есть русские буквы в пути в какой-то другой кодировке. Что делать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо