Вы не можете напрямую вызывать функции в другом процессе, в общем. Однако есть некоторые обходные пути, которые вы можете использовать.
Во-первых, если вы знаете адрес экспорта (что не так часто), и функция, которую вы вызываете, использует соглашение о вызовах __stdcall
, в качестве аргумента принимает целое число размером с указатель, и возвращает DWORD, вы можете использовать CreateRemoteThread
для выполнения его в потоке в удаленном процессе. Это часто используется для запуска LoadLibrary
для внедрения DLL в целевой процесс, поскольку LoadLibrary
загружается по одному и тому же адресу во все процессы на данном компьютере.
В противном случае, внедряемая вами DLL должна будет выполнять какой-то RPC с процессом, который ее вызвал. Например, ваша внедренная DLL может создать поток в своем обработчике DLL_PROCESS_ATTACH, который, в свою очередь, подключается к именованному каналу или подключается через COM или что-то к главному процессу.