草庐IT

AppInit_DLL

全部标签

c++ - DLL 比静态链接慢吗?

我为游戏制作了一个GUI库。我的测试演示以60fps运行。当我使用库的静态版本运行此演示时,它在任务管理器中占用2-3%的cpu。当我使用DLL版本时,它使用了大约13-15%。这正常吗?是这样,我该如何优化它?我已经要求它使用/O2进行大部分函数内联。 最佳答案 在DLL有机会执行其功能一次之前,不要启动性能计时器。这使它有时间加载到内存中。然后启动计时器并检查性能。然后它应该基本上匹配静态库。还要记住,DLL的加载位置会极大地影响它的加载速度。DLL的默认基地址是0x400000。如果您在该位置已经有其他DLL,则加载过程必须执

c++ - 将 C/C++ dll 头文件转换为 Delphi 的最佳资源?

一个相当全面的网站解释了使用c/c++编写的dll以及将.h头文件转换为delphi/pascal所涉及的困难和解决方案,该网站已发布到我最近使用的邮件列表中,所以我想我'会分享它,并邀请其他人为此发布其他有用的资源,无论是链接、转换工具还是书籍/论文标题。请每个答案一个资源,所以我们最终会得到最流行/最好的资源冒泡到顶部。 最佳答案 在Rudy'sDelphiCorner,他有一个excellentarticleaboutthepitfallsofconvertingC/C++toDelphi.在我看来,这是尝试此任务时必不可少的

c++ - 在 DLL 中分配内存并将指向它的指针指向客户端应用程序是不好的做法吗?

我正在使用动态加载DLL的exe。DLL中的函数在堆上分配内存并将指向该内存的指针传递给exe。一位学长说这样做是不好的做法。他说,如果我必须在exe和DLL之间共享内存,则exe必须分配内存并将指向该内存的指针传递给DLL,反之亦然。这是真的?为什么?编辑:就我而言,我计划在DLL本身内部分配和释放内存。 最佳答案 以下是让调用者提供指针的一些原因:对称所有权语义。其他几个答案已经解释了这一点。避免分配器和释放器不匹配。如Aesthete'sanswer中所述,如果DLL分配一个指针并返回它,调用者必须调用相应的释放器来释放它。这

c++ - 如何构建捕获所有异常的 C++ Dll 包装器?

正如标题所说,我们正在寻找一种方法来捕获一段C++代码中的所有异常,并将其包装在一个dll中。这样我们就可以屏蔽使用这个dll的应用程序,使其免受这个dll中发生的任何错误。但是,这在Windows下使用C++似乎是不可能的。例子:voidfunction(){try{std::list::iteratorfd_it;fd_it++;}catch(...){}}发生的异常不会被标准C++try/catchblock捕获,也不会被_set_se_translator()设置的任何SEH转换器函数捕获。相反,DLL崩溃,并且使用DLL的程序被中止。我们使用VisualC++2005编译,带

c++ - 使用许可文件保护 DLL 文件

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion使用许可文件保护DLL的使用/加载的最佳方法是什么? 最佳答案 您可能需要考虑以下几点:校验和DLL。使用cryptographichashfunction,您可以将其存储在许可证文件或DLL中。这提供了一种验证方法来确定我的原始DLL文件是否未被破解,或者它是否是该DLL的许可文件。一些简单的字节交换技术可以快速让您的哈希函数脱离常规(因此不容易重

c# - 创建一个 C# DLL 并从非托管 C++ 中使用它

我有一个本地(非托管)C++应用程序(使用wxWidgets来获得它的值(value))。我正在考虑用C#编写一个单独的工具应用程序,其中包含基于winform的对话框。将其中一些对话框放在单独的DLL中会很有用,因为我希望能够从我的C++应用程序中使用它们。但我不知道要做到这一点需要多少麻烦,是不是特别容易?编辑:我不需要直接调用对话框函数。我只需要一种方法让我的C++应用程序调用C#DLL中的API以传递数据,以及让C#DLL调用C++应用程序中某种观察者/返回对象的方法。例如来自C++:CSharpManager*pCSM=SomehowGetPointerToCSharpObj

c++ - 将字符串从 VBA 传递到 C++ DLL

我对将字符串从VBA传递到C++感到非常困惑。这是VBA代码:PrivateDeclareSubpassBSTRValLib"foo.dll"(ByValsAsString)PrivateDeclareSubpassBSTRRefLib"foo.dll"(ByRefsAsString)PrivateDeclareSubpassByNarrowValLib"foo.dll"(ByValsAsString)PrivateDeclareSubpassByNarrowRefLib"foo.dll"(ByRefsAsString)PrivateDeclareSubpassByWideValLib

c++ - 在 Visual Studio 2010 C++ 中使用 .dll

我有问题。我将我的.DLL和.LIB文件放在与我的项目相同的目录中,转到Properties->CommonProperties->FrameworkandReferences->AddNewReference。但是列表是空的。还有什么我应该做的吗? 最佳答案 C++不是C#。您不会通过添加“引用”在C++应用程序中包含.dll。除非它是C++/CLI,但那不是C++。在C++中,您将在项目配置中转到Linker->Input->AdditionalDependencies。在那里,您将列出库名称以及相关.lib的路径。通常,当您构

c++ - Mingw libgcc_s_sjlj-1.dll 丢失

我正在尝试使用mingw在代码块中编译程序。我必须包含libw2_32.a我没有得到任何编译器错误。该程序编译正常,但是当我想运行它时,它说libgcc_s_sjlj-1.dll丢失。我在我的mingw安装中搜索了这个dll,但我找到的唯一dll是:libgcc_s_dw2-1.dll我做错了什么? 最佳答案 使用mingw的g++编译时必须使用-static-libgcc以消除对LIBGCC_S_SJLJ-1.DLL的依赖。您可以通过将static-libgcc添加到链接器标志来做到这一点。我在这篇文章中找到了这个信息:http:

c++ - 在没有标题的c++ dll中调用函数

我想从dll中调用一个方法,但我没有源代码,也没有头文件。我尝试使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?有没有办法调用这个方法?谢谢, 最佳答案 如果函数是C++函数,您可以从损坏的名称派生函数签名。DependencyWalker是一种可以为您做到这一点的工具。但是,如果DLL是使用C链接创建的(DependencyWalker会告诉您这一点),那么您就不走运了。 关于c++-在没有标题的c++dll中调用函数,我们在StackOverflow上找到一