![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Путь к исполняемому файлу
lookin © (2007-01-03 22:07:00)Какие существуют WinAPI-способы получить путь к исполняемому файлу (exe или dll) в пределах той части кода, которая соответствует инициализации приложения, кроме GetModuleFileName? Спасибо.
tesseract (2007-01-03 22:56:00) [21]А память под переменные выделить?
lookin (2007-01-03 22:49:00) [22]>>tesseract
Опишу точнее проблему. Есть некая программа, которая, используя некое системное ядро, запускает приложение (сишное). Вот функция этого ядра:
function hkStartApplication(HyperKernelExe: PChar; DbgHWnd: HWND): LongInt; stdcall;
HyperKernelExe - командная строка для запуска приложения
DbgHWnd - контрол для получения сообщений, выдаваемых ядром
А вот main сишной программы:
int main(int argc, char* argv[])
{
}
Если записать
s:=ExecutableFile;
if hkStartApplication(PChar(s),lst.handle) then ...
то запуск успешно выполняется. Но если записать что-то в духе
s:=ExecutableFile+' '+SomeParameter;
if hkStartApplication(PChar(s),lst.handle) then ...
то запуск виснет.
Но это, впрочем, не так важно. Важно то, что если в теле main сишной программы я пишу следующее:
HINSTANCE h;
char exefilename[MAX_PATH];
char inifilename[MAX_PATH];
int n,fileid;
char *inifilestring=" ";
h = GetModuleHandle(NULL);
GetModuleFileName(h,exefilename,MAX_PATH);
n = strlen(exefilename);
strncpy(inifilename,exefilename,n-3);
inifilename[n-3] = '\0';
strcat(inifilename,"ini");
n = strlen(inifilename);
inifilename[n] = '\0';
fileid=hkOpen(inifilename,READWRITE_FILE);
if(fileid==0)
hkDebug("Can't open INI-file");
else
{
hkDebug("INI-file has been successfully opened");
hkReadString(inifilestring,8,fileid);
hkReadString(inifilestring,8,fileid);
PORT = atoi(inifilestring);
hkClose(fileid);
}
то запуск тем более виснет. Вот поэтому ищу другие способы получения пути исполняемого файла...
PS Полагаю, из кода ясно, что хочется в сишную программу из запускающей программы передать некий параметр.
tesseract (2007-01-03 22:19:00) [23]WinApi смотри argv[0].
tesseract (2007-01-03 22:15:00) [24]к exe можно, например ExePath:=Application.exename