gpt4 book ai didi

c++ - 有没有办法列出链接的程序集名称?

转载 作者:行者123 更新时间:2023-11-28 05:06:31 25 4
gpt4 key购买 nike

我想列出链接到我的 .exe 的程序集名称。正如我在 c# 中看到的那样,我们有一个 API 可以完成我想要的事情,即 "Assembly.GetReferencedAssemblies"说明:获取此程序集引用的所有程序集的 AssemblyName 对象。

类似于C#,我们可以获取c++中的库列表吗?

如果有人能给我建议就太好了。

最佳答案

给你。打开 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;
}

你应该得到类似的东西

Process 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;
}

重新运行你的程序。你应该得到这样的东西

Process 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

关于c++ - 有没有办法列出链接的程序集名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44626026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com