草庐IT

DLL_EXPORT

全部标签

c++ - 如何在 C++ 中构建与运行时版本无关的 DLL?

我的产品是一个C++库,它在Windows上以dll形式分发。它很少使用c-runtime(基本的iostream就是这样),所以我确信所有最新版本的CRT都可以。由于我的客户应该使用我的dll构建他的应用程序,我不想将任何特定的运行时版本强加给他。我希望我的dll绑定(bind)到我的客户端应用程序正在使用的任何运行时库版本(我可以假设他将为他的CRT使用动态链接)。毕竟,这不就是动态链接的全部意义吗?这可能吗?编辑:将dll与静态运行时库链接也不起作用,因为静态运行时(来自dll)和动态运行时(来自客户端应用程序)将混合在一起,这很糟糕。编辑:我主要要问的是如何告诉运行时加载程序将

c++ - 如何在 C++ 中构建与运行时版本无关的 DLL?

我的产品是一个C++库,它在Windows上以dll形式分发。它很少使用c-runtime(基本的iostream就是这样),所以我确信所有最新版本的CRT都可以。由于我的客户应该使用我的dll构建他的应用程序,我不想将任何特定的运行时版本强加给他。我希望我的dll绑定(bind)到我的客户端应用程序正在使用的任何运行时库版本(我可以假设他将为他的CRT使用动态链接)。毕竟,这不就是动态链接的全部意义吗?这可能吗?编辑:将dll与静态运行时库链接也不起作用,因为静态运行时(来自dll)和动态运行时(来自客户端应用程序)将混合在一起,这很糟糕。编辑:我主要要问的是如何告诉运行时加载程序将

c++ - Lib 和 DLL 链接到 exe 错误 "cannot read at 0x300"

我有一个关于如何使用.dll/.libs的一般性问题。我正在创建一个用于我的项目的.dll,但是,我注意到当我去编译时,我需要静态链接与.dll关联的.lib以供项目编译(否则会出现链接错误“fatalerrorLNK1107:无效或损坏的文件:无法读取0x300")。所以以后当我重新分发我的项目,然后在将来更新它时,我是否需要发布一个新的.exe和一个新的.dll而不仅仅是一个新的.dll?如果是这样,那为什么还要使用.dll呢? 最佳答案 .lib包含由DLL导出的函数等的stub。您将.lib链接到您的EXE中,现在您的EXE

c++ - Lib 和 DLL 链接到 exe 错误 "cannot read at 0x300"

我有一个关于如何使用.dll/.libs的一般性问题。我正在创建一个用于我的项目的.dll,但是,我注意到当我去编译时,我需要静态链接与.dll关联的.lib以供项目编译(否则会出现链接错误“fatalerrorLNK1107:无效或损坏的文件:无法读取0x300")。所以以后当我重新分发我的项目,然后在将来更新它时,我是否需要发布一个新的.exe和一个新的.dll而不仅仅是一个新的.dll?如果是这样,那为什么还要使用.dll呢? 最佳答案 .lib包含由DLL导出的函数等的stub。您将.lib链接到您的EXE中,现在您的EXE

解决Win运行程序出现找不到d3dx9_27.dll的问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个d3dx9_27.dll文件进行安装(前提是找到适合的版本),当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此安装好之后就能重新打开你的软件或游戏了.那么出现d3dx9_27.dll丢失要怎么解决?一、手动从本站下载dll文件1、从下面列表下载d3dx9_27.dll文件32位文件:d3dx9_27.dll9.8.299.064位文件:d3dx9_27.dll9.8.299.02、将下载的

c++ - 更改 Windows DLL 加载顺序? (加载顺序,不是搜索顺序)

假设我有一个可执行文件:app.exe我在这个可执行文件中使用了2个不同的3rd方DLL:foo.dllbar.dll并且应用程序必须隐式链接到这些DLL,也就是说我不能使用::LoadLibrary来加载它们。(注意:不是我不能调用LoadLibrary,而是这些DLL需要静态链接(C++DLLswith__declspec(dllexport)),所以我调用LoadLibrary没有任何意义,因为可执行加载器已经调用了它。)这两个DLL确实彼此之间没有任何依赖关系,也就是说,据我所知,它们的加载顺序是未定义的(并且应该是不相关的)。(两者的依赖基本上都只在标准的windowsdll

c++ - 更改 Windows DLL 加载顺序? (加载顺序,不是搜索顺序)

假设我有一个可执行文件:app.exe我在这个可执行文件中使用了2个不同的3rd方DLL:foo.dllbar.dll并且应用程序必须隐式链接到这些DLL,也就是说我不能使用::LoadLibrary来加载它们。(注意:不是我不能调用LoadLibrary,而是这些DLL需要静态链接(C++DLLswith__declspec(dllexport)),所以我调用LoadLibrary没有任何意义,因为可执行加载器已经调用了它。)这两个DLL确实彼此之间没有任何依赖关系,也就是说,据我所知,它们的加载顺序是未定义的(并且应该是不相关的)。(两者的依赖基本上都只在标准的windowsdll

即使是静态链接的 C++ 请求 MSVCP110D.dll

我在我的机器上用C++创建了一个library注入(inject)方法,当我尝试将特定的dll注入(inject)到进程中时效果很好。但是,当我在friend的计算机上运行程序时(未安装VisualStudio的可再发行组件),我被警告我需要MSVCR等...(可再发行产品)。所以我在release模式下使用VisualStudio2012中的以下设置进行编译:RuntimeLibrary:Multi-threaded/MT。现在当我在我friend的电脑上运行它时机器我被警告我只需要库MSVCP110D.dll(奇怪,要求调试版本)(没有防病毒,并且UAC被禁用)。我在发布路径中手动

即使是静态链接的 C++ 请求 MSVCP110D.dll

我在我的机器上用C++创建了一个library注入(inject)方法,当我尝试将特定的dll注入(inject)到进程中时效果很好。但是,当我在friend的计算机上运行程序时(未安装VisualStudio的可再发行组件),我被警告我需要MSVCR等...(可再发行产品)。所以我在release模式下使用VisualStudio2012中的以下设置进行编译:RuntimeLibrary:Multi-threaded/MT。现在当我在我friend的电脑上运行它时机器我被警告我只需要库MSVCP110D.dll(奇怪,要求调试版本)(没有防病毒,并且UAC被禁用)。我在发布路径中手动

c++ - 使用 CreateRemoteThread 注入(inject) DLL

如果您看一下以下简单DLL注入(inject)的工作代码://Openthetargetprocesswithread,writeandexecutepriviledgesProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,FALSE,ID);//GettheaddressofLoadLibraryALoadLibrary=(LPVOID)GetProcAddress(GetModuleHandl