Модератор: Модераторы
serg_iv писал(а):Спасибо, а то я думал в Линуксе какие-то свои методы. Работает.
Можно также с помощью pwd
Romtek писал(а):Можно также с помощью pwd
pwd - print name of current/working directory
Alexander писал(а):Romtek писал(а):Можно также с помощью pwd
Действительо как ?
Ведь если верить ману:pwd - print name of current/working directory
И причём здесь путь к екзешнику ?
Romtek писал(а):А если нужно узнать из какой директории её вызывают, то используется мой вариант.
Romtek писал(а):P.S. В Линуксе нет "екзешников".
The Executable and Linking Format (ELF)
shade писал(а):Не знаю как в Linux, а в Windows ParamStr(0) может возвращать неожиданный результат,
Alexander писал(а):И поэтому я тоже использовал GetModuleFileName.
Хотя ParamStr(0) "официально" для этой задачи предназначена.
$if defined(win32) or defined(win64) or defined(wince)}
function GetModuleName(Module: HMODULE): string;
var
ResultLength, BufferLength: DWORD;
Buffer: UnicodeString;
begin
BufferLength := MAX_PATH div 2;
repeat
Inc(BufferLength, BufferLength);
SetLength(Buffer, BufferLength);
ResultLength := GetModuleFileNameW(Module, Pointer(Buffer), BufferLength);
if ResultLength = 0 then
Exit('');
until ResultLength < BufferLength;
SetLength(Buffer, ResultLength);
Result := Buffer;
end;
function GetModuleName(Module: HMODULE): UnicodeString;
var
Buffer: array [0..MAX_PATH] of WideChar;
begin
if GetModuleFileNameW(Module, Buffer, Length(Buffer)) > 0 then
Result := Buffer
else
Result := '';
end;
Сквозняк писал(а):В винде они тоже ущербные, из-за кодировок.
shade писал(а):Не знаю как в Linux, а в Windows ParamStr(0) может возвращать неожиданный результат, если точнее, то он вернет, то что будет передано функции CreateProcess.
Sharfik писал(а):Функции все адекватные. Если программист не понимает что делает, и устраивает котовасию как выше это его косяк, а не винды. Винда работает со своей кодировкой, и возвращает строки в WideString/UTF-16. Это как пытаться ехать на паровозе с колесной парой 800мм, по путям 1000мм. Естественно на стыке систем надо сделать перекодирование. Давайте еще позмущаться, почему исходники С++ не читаются FPC копилятором без переделки.
uses
..........
Sharfik писал(а):Еще одна глупость... ParamStr(0) возвращает все что надо.
uses
JwaWindows;
type
stroki2 = type ANSISTRING(65001);
var
s5: stroki2;
function GetModuleName2(Module: HMODULE): UnicodeString;
var
{
ResultLength, BufferLength: DWORD;
Buffer: UnicodeString;
begin
BufferLength := MAX_PATH div 2;
repeat
Inc(BufferLength, BufferLength);
SetLength(Buffer, BufferLength);
ResultLength := GetModuleFileNameW(Module, Pointer(Buffer), BufferLength);
if ResultLength = 0 then Exit('');
until ResultLength < BufferLength;
SetLength(Buffer, ResultLength);
GetModuleName2:=Buffer;
}
Buffer: array [0..MAX_PATH] of WideChar;
begin
if GetModuleFileNameW(Module, Buffer, Length(Buffer)) > 0 then GetModuleName2 := Buffer
else GetModuleName2 := '';
end;
begin
s5:=GetModuleName2(0);
writeln('_1____Scitannyi putj= ',GetModuleName2(0));
writeln('_2____Scitannyi putj= ',s5);
end.
Сквозняк писал(а):Если бы эта функция в винде всегда возвращала что надо, то и вопроса тут не задавал. Давайте и все баги на багтрекере тоже глупостью обзывать - кто-то посмел назвать результат официальных решений багами. Всем запостившим баги на багтрекере вместо решения выдать по подзатыльнику и баги исчезнут а программы перестанут глючить!
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: Google [Bot] и гости: 5