草庐IT

DLL_EXPORT

全部标签

c++ - 通过 dll 边界传递对 STL vector 的引用

我有一个很好的库来管理需要返回特定字符串列表的文件。由于我将使用它的唯一代码将是C++(和Java,但这是通过JNI使用C++),我决定使用标准库中的vector。库函数看起来有点像这样(其中FILE_MANAGER_EXPORT是平台定义的导出要求):extern"C"FILE_MANAGER_EXPORTvoidget_all_files(vector&files){files.clear();for(vector::iteratori=file_structs.begin();i!=file_structs.end();++i){files.push_back(i->full_p

c++ - 如何在 VC++ 静态库中加载自定义二进制资源作为 dll 的一部分?

我有自定义二进制资源(动画光标),希望将其作为资源存储在VisualStudioC++的静态库中。事实证明,自定义二进制资源不会被::LoadCursor()加载或被::FindResource()找到,如果它是自定义资源并且在静态库中。Thisquestion提供一些解决方法。按照它的建议,如果我将*.res文件作为“配置属性->链接器->附加依赖项”添加到exe,那么静态库将能够找到该资源。但是,如果静态库是dll的一部分,并且我将其作为附加依赖项链接,则不会再次找到它!如何链接dll中的资源?或者只是在静态库中找到二进制文件?问题中的方法非常繁琐。 最

c++ - Visual Studio 2010 无法启动程序 .dll

我的VisualStudio2010出现问题。当我单击开始调试按钮时,它开始调试。似乎没有错误“我只是在上面创建一个”按钮“”但是会显示无法启动程序'c:\users\.....\xx.dll'有人现在怎么解决?第二个问题是:当我点击左键查看“Button”源代码时,为什么它会显示所有这些项目代码?我应该修改一些设置吗? 最佳答案 VisualStudio不会自行运行.dll。您的解决方案是否有.exe项目?如果是这样,右键单击它并选择“设置为启动项目”。如果没有,您将需要创建一个,并指示它在您的dll中加载表单。至于左键单击按钮,

c++ - 静态链接到库但仍需要 dll 才能运行的程序

在链接方面有些事情我不明白...我正在使用第3方库(GEOS库)编写程序。该程序依赖于geos.lib,但仍需要geos.dll才能运行。我读过thisquestion,我想我理解静态库和动态库的区别。我不明白的是为什么我静态链接库时仍然需要一个dll。 最佳答案 Windows上有3种库:对象库(*.lib)导入库(*.lib)动态库(*.dll)对象库是静态链接的。它们包含由库抽象的代码的完整对象定义。导入库是对象库的一种特殊形式。它们不包含代码,而是包含最终将可执行文件映射到动态链接库的链接器的信息。动态链接库(如对象库)为您

c++ - 使用 list 的 DLL 重定向

我需要可靠地重定向应用程序查找特定DLL。使用app.exe.local方法不起作用,因为如果应用程序具有list(嵌入或单独的文件),则忽略本地文件。所以我试图通过在list中将DLL定义为私有(private)程序集来进行DLL重定向。我有一个测试应用程序LoadDll.exe,它只是调用LoadLibrary("C:\\EmptyDll.dll");LoadDll.exe具有list(作为单独的文件,LoadDll.exe.manifest)包含LoadDll.exe(不是c:\)的应用程序文件夹包含带有嵌入式list的EmptyDll.dll。但是,LoadDll.exe继续加

c++ - 生成导出包含 ATL::CString 成员的类的 DLL 时出现警告 C4251

我正在将基于ATL的静态库转换为DLL,并且在任何使用ATLCString类(在atlstr.h中找到)的导出类上都收到以下警告:warningC4251:'Foo::str_':class'ATL::CStringT'needstohavedll-interfacetobeusedbyclientsofclass'Foo'我正确地将Foo类声明为通过__declspec(dllexport)导出。这是我可以安全忽略的警告还是我做错了什么?DLL项目设置设置为与ATL动态链接,但这似乎没有任何区别。例如:#ifdefDLLTEST_EXPORTS#defineDLLTEST_API__

c++ - 获取 DLL 中导出函数的签名

是否可以从DLL中获取导出的(C风格?)函数的签名(参数计数/类型、返回类型)?我可以使用DLLExportViewer查看函数名称、地址、序数等列表但我无法查看签名。我只有dll文件,没有.h和.def文件。更新:使用名为APIMonitor的工具,我可以附加到使用上述dll的进程并查看对函数的调用。这让我可以看到参数的数量、返回值及其整数值(指针?),但这并没有多大帮助。我可能应该找到一种方法来确定这些指针在调用时指向的结构类型。 最佳答案 DLL不存储它们导出的函数的签名。其他答案提到了C++,当一个C++函数被导出为C++时

c++ - .dll 文件是为每个程序加载一次还是为所有程序加载一次?

我有一个简单的小问题,知道的人可以轻松回答,我搜索了谷歌但找不到答案。计算机上同时运行着许多程序,我的问题是:当程序加载DLL时,它是实际加载DLL文件还是找到已经加载DLL的内存?例如,ws2_32.dll(winsock2)是为每个使用winsock的程序加载,还是只加载一次,所有使用它的程序都使用相同的内存地址来调用函数? 最佳答案 它被加载一次,所有程序共享相同的内存中代码拷贝。这有点复杂,但是对于DLL的只读部分(即代码),操作系统加载程序使用一种称为“内存映射”的技术将DLL映射到进程的地址空间。对于所有进程,页面只加载

c# - 有没有办法调试从 C# DllImport 调用的 c++ dll?

我想知道是否有任何方法可以调试从VS2010中的C#PInvoke调用的c++dll。我试图将项目附加到c#应用程序中,但它没有工作-没有在断点处停止。我还尝试在C++项目中使用OutputDebugString记录任何内容,但没有使用PInvoke调用打印任何内容。尽管存在这些问题,但实际功能运行良好。我们将不胜感激。 最佳答案 两者都需要打开相同的选项:项目>属性>调试选项卡>勾选“启用非托管代码调试”选项。您现在可以在nativeDLL代码中设置断点,一旦C#项目加载DLL,它就会从空心变为实心。由于使用了非托管调试引擎,Ou

c++ - 如何在 DLL 中使用类?

我可以在DLL中放置一个类吗?我写的课是这样的:classSDLConsole{public:SDLConsole();~SDLConsole(){};voidgetInfo(int,int);voidinitConsole(char*,char*,SDL_Surface*,int,int,int);voidsendMsg(char*,int,SDL_Surface*);voidcls(SDL_Surface*);private:TTF_Font*font;SDL_Surface*consoleImg;intwidth,pos,height,line,size,ctLine;SDL_S