当我调用这个 CallExport 函数时,GetProcAdress(module, "Main") 返回 0,我不知道为什么。之前的 LoadLibraryEx 工作并返回一个有效的 IntPtr。
public class ProcessInteraction {
public static bool CallExport(Process process, string dll, string function)
{
IntPtr module = LoadLibraryEx(dll, IntPtr.Zero, 1);
if (module == IntPtr.Zero) return false;
IntPtr functionAddress = GetProcAddress(module, function);
if (functionAddress == IntPtr.Zero) return false;
functionAddress = GetModule(process, dll).BaseAddress + (int)functionAddress - (int)module;
IntPtr thread = CreateRemoteThread(process.Handle, IntPtr.Zero, IntPtr.Zero, functionAddress, IntPtr.Zero, 0, IntPtr.Zero);
if (thread == IntPtr.Zero) return false;
WaitForSingleObject(thread, 0xFFFFFFFF);
CloseHandle(thread);
return true;
}
}
在我的 Dll 代码中,我有:
internal class EntryPoint {
[DllExport("Main")]
internal static void Main() {
// some code ...
}
}
似乎 GetProcAdress(module, "Main") 在我的 dll 中找不到“Main”函数,即使有一个。