草庐IT

DLL_EXPORT

全部标签

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设置中,以及我正在导入的库的路径。然后,当我去构建项目时,它会产生一个链接器错误(我知道是因为目标文件已编

c# - 如何从 native C(++) DLL 调用 .NET (C#) 代码?

我有一个C#app.exe和一个C#my.dll。my.dll.NET项目链接到nativeC++DLL(mynat.dll)(外部CDLL接口(interface)),并且从C#调用C++DLL没有问题。(通过使用[DllImport("mynat.dll",CharSet=CharSet.Unicode,CallingConvention=CallingConvention.Cdecl)]属性。)我现在需要添加的是让C#dll提供一些C++代码可以调用的回调函数。理想情况下,mynat.dllC++代码将使用LoadLibrary("my.dll")来加载C#dll,然后使用Get

c++ - 托管 C++ dll 的加载程序锁定错误,静态链接到 native C++ 库

我有一个托管的c++dll,其中包含几个托管类,这些托管类依次调用库中的nativec++代码,我已静态链接到该dll。但是,如果我尝试在dll上运行RegAsm.exe,该工具会正确报告“我们没有注册任何类型”,但随后挂起。我很确定这是loaderlock问题,当RegAsm尝试加载它时我的dll挂起。我使用的是VisualStudio2008速成版。让我感到困惑的是,将native代码放入dll时一切正常,但从库中静态链接时却不行。我知道这篇文章类似于thisquestion但我的dll中没有没有DllMain,因此我没有从DllMain运行MSIL代码的风险。此外,遵循对单个文件

c++ - DLL/SO 库,库内存与调用进程有何关系?

我读到当进程终止时(以任何方式)操作系统释放了进程的所有内存,因此不需要依次调用每个dtor。现在我的问题是DLL或SO的内存与分配内存的清理有什么关系?我问是因为我最终可能会使用Java和/或C#调用带有一些静态C样式函数的C++DLL,这些函数将在堆上分配C++对象。抱歉,如果我对堆线程与堆栈线程的看法太过分了,我觉得我已经看不到__堆(即只有一个)的概念。使用库时还有其他潜在的内存泄漏陷阱吗? 最佳答案 库在加载时成为进程的一部分。对于内存、句柄、资源等的整理,系统不区分它们是在可执行镜像中创建的还是在库中创建的。

c++ - CMake 生成的 DLL 和 Curiously Recurring 模板 (C++) 的不正确行为

我在Windows上遇到了CMake生成的DLL文件的令人困惑的问题。在我的库中,我使用CuriouslyRecurringTemplatePattern为某些类提供唯一的ID号://da/Attribute.h:#ifndefDA_ATTRIBUTE_H#defineDA_ATTRIBUTE_Hnamespaceda{typedefunsignedintAttributeId;classAttributeBase{public:virtualAttributeIdgetTypeId()const=0;protected:/**StaticIDcounter.Everyclasstha

c++ - 创建 Dll 文件

我即将使用VisualStudio创建一个dll项目。后来它的机制是什么?最后是否会生成一个dll文件,以后可以在其他项目中使用? 最佳答案 VS将为您生成两个文件:一个.lib和一个.dll。原则上,.dll就足够了。你可以调用LoadLibrary在文件上并直接从.dll文件中检索任何导出的函数。这里的问题是编译器不知道dll提供了哪些功能,所以你必须做GetProcAddress。调用您要使用的每个函数。由于这非常不方便,VS还生成了.lib文件,它为您解决了整个麻烦。只需将您的可执行文件静态链接到.lib,它将在运行时为您处

c++ - Visual Studio 2013 dll 导出链接错误 (LNK2019/LNK1120)

我知道之前有人问过类似的问题,但看起来在类导出方面与简单函数有所不同......我已经检查了所有这些解决方案,检查了所有建议,但看起来我仍然是遗漏了一些东西......发生了什么:我有一个用VisualStudio2013编写的主C++项目,我想添加一个包含各种实用程序的dll库。我创建了一个虚拟的,基本上没有任何功能,但它无法编译:2>TestSvc_i.c2>TestSvc.obj:errorLNK2019:unresolvedexternalsymbol"__declspec(dllimport)public:__thiscallCUtils::CUtils(void)"(__i

python - 在 python 中使用 cpp 项目 dll 和 .lib 文件

因此,使用标准的cpp编译器,我的应用程序链接到.lib文件,然后在运行时,只要dll与可执行文件位于同一文件夹中,一切都神奇地工作..但是在python中,.lib文件起什么作用呢?我知道您可以通过使用ctypes来使用dll的功能fromctypesimport*dllHandle=cdll.LoadLibrary("C:\\filename.dll")orctypes.WinDLL("C:\\filename.dll")但是不使用.lib文件会丢失什么?如果不需要,为什么在cpp项目中需要它? 最佳答案 如果在test.dll