草庐IT

c# - 如何将 C++/CLI 字符串转换为 const char*

我有一个C++/CLIDLL,我打算将其用作我的C#DLL和nativeC++客户端之间的适配器。我需要在两个方向上传递字符串。该适配器是使用VS2013编译的,但需要支持使用VS2008构建的客户端,因此我在API中使用constchar*。但是即使两者都是VS2013构建的,我所得到的也无法正常工作。我在其他地方找到了使用msclr\marshal.h的建议,因此我创建了:usingnamespacemsclr::interop;System::String^ToCliString(constchar*s){System::String^result=marshal_as(s);r

c++ - 处理 QPluginLoader::load() 抛出的异常

我有2个Qt插件,main和helper,main.dll加载helper.dll。当main.dll和helper.dll都在时,我能够使用QPluginLoader成功加载main.dll同一个文件夹。当helper.dll不存在并且我尝试加载main.dll时,抛出异常。这是可以理解的原因helper.dll找不到。我的任务是成功捕获抛出的异常,而不是让应用程序崩溃。调试时QtCreator显示的是:下面的代码没有解决问题,所以我需要做点别的……std::exception_ptreptr;QPluginLoaderpluginLoader(packagePath);try{pl

c++ - 由于 KERNELBASE.dll 错误,GDB 无法运行程序

我最近才开始遇到这个问题,我不知道它是什么时候开始出现的/是什么原因造成的。我这里有这个简单的测试程序:#includeintmain(){return0;}但是当我尝试正常运行它时,它会创建一个堆栈转储。Stacktrace:FrameFunctionArgs00CBC4986101D93A(00000198,0000EA60,000000A4,00CBC508)00CBC5C8610E2F3F(00000000,60FC04E8,00CBC658,7794ABEE)然而,当我尝试在GDB中运行它时,它显然无法运行。gdb:unknowntargetexception0x406d13

C++:获取 native dll依赖项而无需在进程中加载​​它

我需要以编程方式获取DLL的依赖项列表。以下是我尝试解决此任务的方式:BSTRGetDllDependencies(constwchar_t*dllPath){std::wstringdependencies;structLibDeleter{typedefHMODULEpointer;voidoperator()(HMODULEhMod){FreeLibrary(hMod);}};autohModRaw=LoadLibraryExW(dllPath,NULL,DONT_RESOLVE_DLL_REFERENCES);//(*)nullptrnereautohMod=std::uniq

c++ - DLL注入(inject)记事本

我想在记事本中显示一个消息框,所以我找到了一个简单的dll注入(inject)示例。注入(inject)器本身不是我的并且似乎工作正常(获取进程的id,创建一个远程线程,获取dll文件的绝对路径)。我认为问题在于dll的实现。项目在没有任何警告的情况下编译,但没有达到预期的结果。你能看一下并帮助我理解问题吗?(我已经把发布版本的dll放到了injector项目文件夹中)dllmain.cpp://dllmain.cpp:DefinestheentrypointfortheDLLapplication.#include"stdafx.h"#include"dll.h"#include#i

c++ - 如何通过 Node N-API 使用第三方 dll、头文件和 lib 文件

我已经获得了使用c++dll的所有适当文件:头文件库文件动态链接库我正在尝试使用NodeN-API使用给定的文件,这样我们就可以在我们的Node服务器中使用这个c++dll。问题是,当我尝试使用node-gyp进行构建时,它会抛出以下错误:LINK:fatalerrorLNK1181:cannotopeninputfile'lib\MathUtils.lib'[C:\Development\Github\node-thin-client\service\build\interface.vcxproj]我使用的Node版本是:8.11.2node-gyp版本为:3.6.2我的bindin

c++ - 无法编译访问另一个 dll 的 dll

所以,我有一个有趣的问题。我正在使用一组专有的dll,显然我没有这些dll的源代码。目标是编写一个中间dll,将来自专有dll的大量函数调用组合在一起。我遇到的问题是,在使用g++进行编译时,原始dll出现如下错误:无法导出libname_NULL_THUNK_DATA。找不到符号。如果我添加一个main并编译成一个可执行文件,一切都会按预期工作。我正在使用mingw进行编译。感谢您的帮助。针对第一个回复:要么我对您所说的内容感到困惑,要么我没有很好地表达我的问题。我并没有明确尝试从我的包装器中导出任何东西,我只是从它们的dll中调用函数。问题是我收到错误,无法将这些特定符号从dll导

c++ - 修改dll导出(符号表)。我想混淆函数名称

我有一个第三方dll,我想更改符号名称。这可能吗?我不想让竞争对手知道我的产品使用什么组件。我没有dll的源代码。 最佳答案 在链接和运行时将可执行文件与dll绑定(bind)需要符号表。它通常包含装饰函数名称和序数。可以只使用序数。如果您正在构建库,您可以定义.def文件来控制符号表。但如果这是预建的第3方库,可能很难走。当然一切皆有可能,但我怀疑你的努力是否值得。如果您绝望了,我会尝试在十六进制编辑器中更retrofit饰函数名称中的一个字母,查找此函数的序数值,然后尝试使用带有此函数序数的GetProcAddress。

c++ - 找出用于编译可执行文件/DLL 的 Boost 版本

有什么方法可以使用“字符串”或其他一些命令来决定使用哪个版本的Boost来编译特定的可执行文件或.so?我所拥有的只是可执行文件/.so本身。 最佳答案 Boost主要是一个只有头文件的库,广泛使用模板(所有模板都可能编译成一些优化的二进制文件)。仅给定可执行二进制文件,您很可能无法推断出所使用的Boost版本。可能是您了解使用哪个Boost版本的唯一方法是查看可执行文件的版本号(如果有的话),然后在它来自的源代码控制存储库中查找(如果您有权访问它)。 关于c++-找出用于编译可执行文件

C++ DLL 不会链接?

好了,问题来了。为了提高我对C++API的了解,我尝试学习更多关于库文件类型的知识。我对静态库很了解。您只需将库链接到项目中,其内容在编译和链接时放在二进制文件中。但是,当我开始尝试使用动态库时遇到了一个问题。我能够使用__declspec函数成功编译DLL文件,并创建外部block(因此它可以成功导出到C++)。但是,当我尝试链接文件时出现问题。根据我在网上看到的多个教程,我创建了一个带有前向定义的header,并将其包含到可执行项目中。然后,我确保将搜索目录添加到项目build设置中,以及我正在导入的库的路径。然后,当我去构建项目时,它会产生一个链接器错误(我知道是因为目标文件已编