C ++ Как получить идентификатор процесса из имени файла DLL (Windows)? - PullRequest
1 голос
/ 10 июля 2011

как я могу получить идентификатор процесса из имени файла?Например: int processId = getProcessIdByFileName("Network.dll"); Кстати, какой тип данных имеет идентификатор процесса?

Расширенная информация: У меня есть исходный код DLL.Эта DLL загружается в приложение, как и несколько других DLL.Я хочу подключить другие функции DLL.Поэтому мне нужен идентификатор процесса для них (есть ли идентификатор процесса для каждой DLL, если все они запускаются под одним приложением?

Как я мог бы вызывать функции других DLL внутри моей DLL? Как получить дескрипторим?

Ответы [ 4 ]

3 голосов
/ 10 июля 2011

DLL не имеют идентификаторов процессов.DLL может быть загружена в несколько процессов или вообще не загружаться.DLL может быть загружена в процесс, позже выгружена, а затем загружена снова.Бессмысленно говорить об идентификаторе процесса DLL.Что вы на самом деле пытаетесь сделать?

0 голосов
/ 08 сентября 2011

DLL не запускаются, они загружаются процессами, поэтому это невозможно.Однако вы можете найти PID процесса, используя его путь или имя, т.е.Получить PID «explorer.exe»

Вы можете получить PID процессов, которые загрузили конкретную DLL.то есть.

int PIDs[128];
GetDependentProcesses(PIDs, "Kernel32.dll"); //Custom function, not built in

for(int x = 0; x < 128; x++)
{
   cout << PIDs[x] << " Depends on Kernel32.dll\n";
}

И вы не можете подключить DLL, только процесс.

0 голосов
/ 10 июля 2011

Идентификатор процесса в Windows не является статически встроенным в файл, это свойство, которое есть у любой DLL, EXE или исполняемого файла после его запуска. Проверьте Toolhelp API, вы найдете все ответы там.

Для вызова функций из другой DLL вам нужно динамически загрузить эту DLL, посмотрите пример http://www.codeproject.com/KB/DLL/dynamicdllloading.aspx

0 голосов
/ 10 июля 2011

Это невозможно, и вот почему. DLL разделены между процессами. У него может быть только один «собственный» процесс, у него может быть много. Вы МОЖЕТЕ определить, какие библиотеки загружены программой (например, средство обхода зависимостей), однако вы не можете определить, какие программы (если они есть) подключены к DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...