![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка пути в 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, так путь с русскими буквами создался не правильный, то есть русские буквы в пути в какой-то другой кодировке. Что делать?