我想列出链接到我的.exe的程序集名称。正如我在c#中看到的,我们有一个API可以完成我想要的东西,即"Assembly.GetReferencedAssemblies"
说明:获取此程序集引用的所有程序集的AssemblyName对象。
与C#类似,我们可以用c ++获取库列表。
如果有人能给我一个建议,那就太好了。
答案 0 :(得分:1)
你走了。打开VS并创建一个新的Win32控制台应用程序
复制并粘贴下面的代码。跑吧。
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <vector>
#include <iostream>
#include <string>
int PrintModules(DWORD processID)
{
std::vector<HMODULE> modules;
HANDLE process;
DWORD bytesNeeded;
std::cout << "Process ID:" << processID << std::endl;
process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
if(NULL == process)
return 1;
EnumProcessModulesEx(process, nullptr, 0, &bytesNeeded, LIST_MODULES_ALL);
modules.resize(bytesNeeded / sizeof(HMODULE));
if(EnumProcessModulesEx(process, modules.data(), modules.size() * sizeof(HMODULE), &bytesNeeded, LIST_MODULES_ALL))
{
for(auto handle : modules)
{
std::vector<char> moduleName(1024, 0);
auto newSize = GetModuleFileNameEx(process, handle, moduleName.data(), moduleName.size());
moduleName.resize(newSize);
std::cout << "\t" << moduleName.data() << std::endl;
}
}
CloseHandle(process);
return 0;
}
int main()
{
PrintModules(GetCurrentProcessId());
return 0;
}
你应该得到像
这样的东西流程ID:9348
C:\ Path \ Visual Studio 2015 \ Projects \ ConsoleApplication5 \ Debug \ ConsoleApplication5.exe
C:\ WINDOWS \ SYSTEM32 \ ntdll.dll中
C:\ WINDOWS \ SYSTEM32 \ KERNEL32.DLL
C:\ WINDOWS \ SYSTEM32 \ KERNELBASE.dll
C:\ WINDOWS \ SYSTEM32 \ MSVCP140D.dll
C:\ WINDOWS \ SYSTEM32 \ VCRUNTIME140D.dll
C:\ Windows \ System32下\ ucrtbased.dll
现在将新的Win32 DLL添加到解决方案中。链接您的控制台应用程序。从main
中的新库中调用任何方法。这样的事情。
int main()
{
auto res = fnMyLibrary();
PrintModules(GetCurrentProcessId());
return 0;
}
重新运行你的程序。你应该得到这样的东西
流程ID:9348
C:\ Path \ Visual Studio 2015 \ Projects \ ConsoleApplication5 \ Debug \ ConsoleApplication5.exe
C:\ WINDOWS \ SYSTEM32 \ ntdll.dll中
C:\ WINDOWS \ SYSTEM32 \ KERNEL32.DLL
C:\ WINDOWS \ SYSTEM32 \ KERNELBASE.dll
C:\ Path \ Visual Studio 2015 \ Projects \ ConsoleApplication5 \ Debug \ MyLibrary.dll
C:\ WINDOWS \ SYSTEM32 \ MSVCP140D.dll
C:\ WINDOWS \ SYSTEM32 \ VCRUNTIME140D.dll
C:\ Windows \ System32下\ ucrtbased.dll
整个解决方案是here