草庐IT

DLL_EXPORT

全部标签

c++ - 逆向工程 C++ DLL

我有一个最初用VS2005编写的小实用程序。我需要做一点小改动,但是其中一个dll的源代码在某处丢失了。是否有免费或价格合理的工具将dll反向工程回C++代码。 最佳答案 Hex-Raysdecompiler是一个很棒的工具,但代码将很难阅读,您将不得不花费大量时间对整个DLL进行逆向工程。 关于c++-逆向工程C++DLL,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6234

c# - 为 C# 包装 native DLL

我编写了一个C++DLL,现在我需要从托管应用程序调用native函数。导出的原生函数如下所示:extern"C"__declspec(dllexport)boolNativeMethod(char*param1,char*param2,char*result);因此,在C#中,我将调用该函数传递2个输入参数、1个输出参数,显然我将读取返回的bool值。我尝试以多种方式包装所有这些,但总是遇到PInvokeStackImbalance异常。我知道调用native函数的唯一方法是在.NET函数声明上应用CallingConvention=CallingConvention.Cdecl)。

c++ - 如何在 DLL 边界上公开 STL 列表?

我有一个DLL,它需要访问存储在主机应用程序的STL容器中的数据。因为C++没有标准的ABI,而且我想支持不同的编译器,所以应用程序和DLL之间的接口(interface)基本上必须保持纯旧数据。对于vector,这是相对简单的。您可以简单地返回vector的内存块,因为它保证是连续的://ToreturnvectordatavirtualvoidGetVectorData(constint*&ptr,size_t&count)const{if(!vec.empty())ptr=&(vec.front());count=vec.size();}现在DLL可以通过该接口(interfac

c# - 如何调用接受来自 C# 的 stringstream 类型参数的 C++ DLL 函数?

我想导入一个非托管C++DLL并调用一个将stringstream作为参数的函数。在C#中,没有stringstream类,所以谁能告诉我如何从C#程序中调用这样的函数? 最佳答案 句号,您不应该通过DLL公开模板化对象。模板化对象(例如std::中的几乎所有内容)都被内联。所以通过这种方式,您的DLL获得了它自己的私有(private)实现拷贝。调用您的DLL的模块还将获得其自己的stringstream私有(private)实现。在它们之间传递意味着您无意中将两个不相关的实现编织在一起。对于许多项目,如果您使用完全相同的buil

c++ - 卸载 DLL 时的内存泄漏是否会导致主机进程发生泄漏?

考虑这种情况:dll=LoadDLL()dll->do()...voiddo(){char*a=malloc(1024);}...UnloadDLL(dll);此时,在调用malloc()时分配的1k是否再次可供宿主进程使用?DLL静态链接到CRT。 最佳答案 操作系统跟踪的进程使用的内存适用于整个进程,而不是特定于DLL。内存由操作系统以block的形式提供给程序,称为堆堆管理器(malloc/new等)进一步划分块并将其分发给请求代码。只有在分配新堆时,操作系统才会检测到内存增加。当DLL静态链接到C运行时库(CRT)时,CRT

c++ - 如何在 C++ 中从 dll(dll 中的构造函数)创建一些类?

如何从dll(dll中的构造函数)创建一些类?(C++)或者如何从dll中动态加载类? 最佳答案 在构建DLL时,您需要使用__declspec(dllexport)关键字声明您的类。使用DLL时,类需要用__declspec(dllimport)声明:#ifdefCOMPILING_DLL#defineDECLSPEC_CLASS__declspec(dllexport)#else#defineDECLSPEC_CLASS__declspec(dllimport)#endifclassDECLSPEC_CLASSMyClass{.

c++ - 如何将 C++ 类导出为 dll?

这个问题在这里已经有了答案:ExportingaC++classfromaDLL(6个答案)关闭9年前。我有C#/Java背景,所以我想弄清楚如何创建一个行为类似于C#dll的C++dll。我已经尝试过__declspec(dllexport)和__declspec(dllimport),但我只设法让它在静态方法上工作。我确信这是由于我的理解有限。如何在C++中导出类(完整地包括私有(private)成员)并能够像在C#中那样在引用端实例化它们?一些指向在线资源/教程的指针也可以做到这一点。我开始使用MFCdll模板,老实说,我不知道它们中的90%是做什么用的,也不知道为什么我要从CW

c++ - 加载程序如何将 DLL 映射到进程地址空间

我很想知道加载程序如何将DLL映射到进程地址空间。loader是如何做到这一点的。高度赞赏示例。提前致谢。 最佳答案 好吧,我假设这里的事情是Windows方面的。加载PE文件时发生的事情是加载程序(包含在NTDLL中)将执行以下操作:使用DLL搜索语义(系统和补丁级别特定)定位每个DLL,众所周知的DLL可以免于此将文件映射到内存(MMF),其中页面是写时复制(CoW)遍历导入目录并在点1处(递归地)开始每个导入。解决重定位问题,大多数情况下这只是非常有限数量的实体,因为代码本身是位置无关代码(PIC)(IIRC)将EAT从RVA

c++ - 如何像 Delphi 应用程序一样创建独立的(没有 DLL 文件依赖项)C++Builder 控制台应用程序?

当我创建一个Delphi控制台应用程序时,我可以部署生成的EXE文件,而不必担心外部DLL文件。但是如果我创建非常简单的C++Builder(2007版)控制台应用程序(无VCL)EXE文件需要CC3280MT.dll文件才能运行。如何避免我的C++Builder控制台应用程序需要CC3280MT.dll文件?即使是这个简单的代码也会导致这种依赖:#include#pragmahdrstop#pragmaargsusedintmain(intargc,char*argv[]){cout 最佳答案 在项目选项中,取消选中链接器选项“动

c++ - dll 会变成机器代码吗?

只是好奇,有人告诉我,使用dll文件,您可以对dll进行修改,而无需重新编译使用它的整个应用程序。另一方面,需要编译.lib文件,以便代码可以作为一个链接到应用程序。所以我知道.lib文件被转换为机器代码。但是dll的呢??它们会在应用程序执行时变成机器码吗??如果使用不当,这可能会导致黑客攻击。 最佳答案 dll仍然是机器代码。它们只是在运行时动态链接(因此得名),因此(如果您不更改函数签名)您不必重新编译主程序以在更改后使用dll。静态库在物理上是您的可执行文件的一部分,这就是为什么那里的更改需要重新编译(或者实际上是重新链接)