草庐IT

AppInit_DLL

全部标签

c++ - 将目前作为独立可执行文件开发的 C++ 项目转换为 DLL

(我在Windows764位机器上使用MicrosoftVisualStudio2010)我开发了一个C++程序,它更像是一个随着时间的推移变得相当复杂的库。它现在作为一个简单的可执行文件工作,但我想将它转换成一个DLL,以便其他程序可以轻松访问该功能。我在使用DLL方面一点经验都没有,但我想避免在此过程中进行大量额外的工作和代码更改。我知道我可以将编译目标选择为“DLL”,但我感觉单独做不到这一点。如果我成功地将我的项目编译成DLL文件,我如何从可执行项目中使用其中的函数?我能否避免使用_dllexport并按名称导入每个函数?如何静态链接DLL,这样做的(缺点)优点是什么?

c++ - 在 LoadLibrary 期间调整 DLL 模块名称

我想在运行时在我的应用程序(A.exe)中加载第三方二进制插件(P.dll)。此插件是为另一个应用程序(B.exe)构建的。该插件在B.exe模块上具有隐式dll导入,例如:模块名称:B.exe函数1函数2功能3我已经从A.exe中导出函数func1、func2和func3,但是我无法使用LoadLibrary加载dll,因为没有名为“B.exe”的模块。有什么比重命名我的应用程序“B.exe”或修补P.dll的PE更好的方法吗?谢谢,西里尔 最佳答案 您可以创建伪造的B.exe,(实际上它可以是DLL),并将B.exe导出重定向到

c++ - 从 VB 传递指向 DLL 中的外部 C 函数的指针

我是一名C++(MSVC)编写者,VB新手,试图协助一位以前从未完成过这项任务的VB.net专家编写者。我们希望开发C/C++和VB应用程序,以使用用C++编写的具有C外部API函数的DLL。C++程序工作正常。我们遇到困难的是VB。DLL提供了一个externC函数:RegisterCallback(void*cbFuncPtr,void*dataPtr);注意1:请参阅下面我的注释以了解设计更改及其原因。注意2:在下面添加了其他更新作为答案。回调函数具有此Ctypedef的位置:typedef(void)(*CALL_NACK)(void*);cbFuncPtr应该是指向某个VB函

c++ - Delphi与C++dll通信(参数)

您好,我在将DLL集成到我的Delphi2007应用程序时遇到了很多问题。我怀疑我对调用的参数做错了什么。目前我有2个问题,但我认为它们彼此相关。1)首先调用DLL:来自.h文件:extern"C"{__declspec(dllexport)HRESULTStartup(char*version);}此调用应初始化DLL并返回DLL的版本。HRESULT应为0,版本指针应包含版本。我的德尔福代码:functionStartup(varversion:Pchar):HRESULT;cdecl;stdcall;external'myDLL.dll';实际调用:varres:HRESULT;

c++ - 如何在 Visual C++ 中创建 ActiveX DLL

是否有在VisualStudio2008C++中创建ActiveXDLL的教程/引用?我有一个用DLLRegisterServer/UnregisterServer构建的DLL,它已注册,但我在弄清楚要使用什么名称来引用它(从vbscript)以及如何确保我的函数是正确导出。我是否必须将我的函数放在一个特殊的类中?谢谢! 最佳答案 有很多细节需要正确处理。最好的办法是使用ATL和内置的ATLobjectwizard.它自动生成一堆文件,以便IDL、类型库、注册脚本、类包装器和事件代理都正确完成。

c++ - DLL 究竟何时会使用与可执行文件不同的堆?

我知道,如果您的DLL静态链接到不同版本的运行时,那么它会创建自己的堆。如果指示它生成堆,它也会这样做。在这种情况下,DLL删除exe分配的内容是不安全的。在什么情况下这不适用(例如,DLL删除exe分配的内容是安全的)?如果exe和DLL静态链接都针对同一个运行时库,是否安全?谢谢基本上有一种方法可以让分配它的人只做addEvent(newDerivedEvent(),FunctorDestroyClass()); 最佳答案 我可能会比那里更多地阅读你的问题,但如果你想知道如何跨DLL边界分配和释放内存,那么你可以使用如下内容:#

c# - 在从 C# 调用的 DLL 中使用 std::cout

这个问题在这里已经有了答案:Redirectingcouttoaconsoleinwindows(11个答案)关闭3年前。我的Windows应用程序有一个C#部分和一个C++部分。C#应用在运行时会显示一个控制台窗口。C++代码被编译成DLL,通过P/Invoke从C#使用。问题是通过std::cout从C++DLL打印文本不会打印任何内容。从C#打印工作正常。我怀疑C#已经接管了控制台,因此C++无法处理它。解决方法可能是从C#获取控制台句柄,将其传递给C++,然后使用它将std::cout连接到控制台窗口。但我不知道该怎么做。有什么想法吗?编辑:我的C++代码是非托管的。

c++ - QT - 在 pro 中指定 DLL 路径。文件

正如问题标题所说,我特别想知道如何在实际项目文件中包含.dll文件的路径。我知道将dll文件包含在项目文件中是更好的做法,但我仍然想知道是否可以这样做?目前我的.pro文件包含以下内容;QT+=coreguiTARGET=TestTEMPLATE=appwin32{INCLUDEPATH+="D:/Projects/BuildOutput/include/"CONFIG(debug,debug|release){LIBS+="D:/Projects/BuildOutput/libs/debug/myLib.lib"LIBS+="D:/Projects/BuildOutput/bin/x

c++ - 有没有人能够在使用共享 DLL 的 Windows 64 位应用程序上集成 tcmalloc?

我有一个64位VisualStudio2010(单线程)C++Windows应用程序,我试图将它与tcmalloc集成,但在使用任何动态链接的dll时遇到问题。我将tcmalloc链接为静态库。在应用程序开始使用我们共享的dll之一之前,tcmalloc工作得很好。我将解决方案构建为64位DEBUG应用程序。所有dll与CRT库的C/C++调试版本(MSVCP100D.dll和MVCR100D.dll)的链接。下面是失败的代码示例。tcmalloc被调用用于所有内存分配,但是当调用delete时应用程序崩溃。当我在主可执行文件中创建一个函数并将代码复制到那里时,完全相同的代码工作正常,

c++ - Excel VBA : "Run-time error ' 4 9': Bad DLL calling convention" calling C++ dll

我正在尝试从Excel-VBA调用C++DLL。我知道DLL函数正在执行,因为我插入了fputs()记录调用以跟踪执行情况,并且标记显示在我的日志文件中。问题是,每当DLL函数返回时,我都会收到错误49。这是VBA中的声明:PrivateDeclareFunctionInitMCRLib"MCRBoilerplate.dll"Alias"?initMCR@@YGXXZ"()这是C++中的声明__declspec(dllexport)void__stdcallinitMCR(){...}为什么我会收到此错误49行为,即使DLL调用似乎正常运行? 最佳答案