我想在DLL中实现一个简单的类,例如:classMY_EXPORT_IMPORTMyClass{public://std::stringanyPublicStr;//seepoint3protected:std::stringanyStr;};问题是VisualC++编译器(在本例中为2013)抛出以下警告:C:...MyClass.hpp:X:warning:C4251:'MyClass::postfix':class'std::basic_string,std::allocator>'needstohavedll-interfacetobeusedbyclientsofstruct
我正在尝试使用MinGW创建一个具有一个公开函数的C++库。我想我已经读够了tutorials,环顾互联网,但似乎没有任何效果,错误总是一样的。未定义的函数引用。这是库的头文件(findPoints.h):#ifndefFIND_POINTS_H#defineFIND_POINTS_H#ifdefBUILDING_FIND_POINTS_DLL#defineFIND_POINTS_DLL_PREFIX__declspec(dllexport)#else#defineFIND_POINTS_DLL_PREFIX__declspec(dllimport)#endif#ifdef__cplu
我正在从事一个跨越许多共享库的规模相当大的项目。我们也非常依赖STL、Boost和我们自己的模板类和函数。许多导出的类包含模板成员,导出的函数包含模板参数。这是我如何导出库的精简示例:#ifdefined(_MSC_VER)&&defined(_DLL)//Microsoft#defineEXPORT__declspec(dllexport)#defineIMPORT__declspec(dllimport)#elifdefined(_GCC)//GCC#defineEXPORT__attribute__((visibility("default")))#defineIMPORT#el
我有一个使用DirectX的nativeC++DLL,我希望能够通过C#使用它来创建内容创建工具。添加COM似乎需要相当大的努力。P/Invoke是否可以用于维护使用多态性的类,还是需要我包装大部分代码以方便使用P/Invoke?有更好的解决方案吗?或者我是否应该考虑使用Qt用C++编写工具? 最佳答案 在进行C#到C++互操作时,我始终觉得C++/CLI始终是最佳选择。您可以轻松地为非托管库创建精简包装器,它看起来与您的C#代码的托管库完全一样。它还可以让您更好地控制编码和固定的执行方式。我相信有一些方法可以自动生成C++/CLI
我有一个依赖于MSVCR80并分配我需要清理的资源的第三方DLL。该库不公开用于执行此操作的免费函数。相反,我需要加载相同的运行时库并手动调用free函数。作为解决方法,我正在尝试编写一个“包装器”DLL,它加载正确的运行时并公开free函数。此DLL是使用VisualStudio2010创建的,并且依赖于单独的运行时库。执行LoadLibrary("msvcr80.dll")失败并出现错误R6034,我猜这是因为明显的问题。甚至可以使用LoadLibrary加载msvcr80.dll吗?我是否需要创建一个list,将其嵌入DLL并将msvcr80.dll存储在与我的包装器DLL相同的
在DLL边界上暴露STL容器不是一个好主意,而且通常是不可能的(参见thisanswerforwhy和thisone关于在dll边界上暴露std::list)。我需要能够在使用不同(VC08/VC10+)编译器编译的DLL和EXE之间传递数据;thisQ只处理相同的一切。暴露它们的最佳方式是什么?vector与列表有点不同,因为保证内存是连续的,所以如果我只需要一个double的constvector,我可以只提供指向block的开始和结束指针到dll中的函数吗?dll还需要返回一些结构,例如vector数组。我想知道包含开始和结束指针的结构:templatestructvecWrap
我有一个用C++编写的DLL,它导出一个函数CreateRisk。该函数返回一个接口(interface)指针,如下所示:extern"C"{__declspec(dllexport)IRisk*__stdcallCreateRisk(){returnnewRisk();}}IRisk派生自IUnknown并具有自定义方法Calculate:classIRisk:publicIUnknown{public:virtualint__stdcallCalculate(inti,doubles)=0;};类Risk实现IRisk接口(interface)(这里省略实现)。我想要的是在C#中调
我遇到的是当我想将我创建的exe调试项目(可以正常工作)复制到另一台机器(显示错误消息)时显示此错误。根据questionpostedpreviously,消除错误消息的最佳解决方案是在配置管理器中发布而不是调试。这样做,并且在使用RELEASE重建项目时,我的项目中出现了新的错误,这些错误在进行DEBUG时没有包括在内。例如,其中之一是:Error2errorC1083:Cannotopenincludefile:'opencv\highgui.h':Nosuchfileordirectoryc:\...\projects\...\ex\opencv.h423IntelliSense
大家好。我目前正在创建一个“共享”库(在Windows上也称为DLL),该库又将依赖“BoostC++”库来提供日期时间功能。我注意到我的Boost安装(通过Boostpro完成)在boost安装的lib目录中有一些DLL和LIB文件。好的,我认为这是必需的,所以我将它们添加到我的IDE中的库依赖项中。现在我要做的是编写使用boost日期时间库的代码,创建共享库并从独立的可执行文件中使用它。它有效,即使我刚刚将我创建的共享库复制到可执行文件夹而不是boost_date_time-vc100-mt-1_47.dll文件。奇怪的。现在我要做的是从我的项目中删除Boost的DLL/库依赖项并
使用VisualStudioc++V10,我试图弄清楚如何构建DLL并解决DLL命名冲突。这是详细信息。公司S运送了一个名为M.EXE的产品.假设M.EXE安装在\S\BIN\M.EXE.公司S静态链接到名为U.DLL的DLL,安装在\S\BIN\U.DLL中.U.DLL包含开源代码,并使用VisualC++编译器选项构建/Zc:wchar_t-,它不会将wchar识别为native类型。C公司发布了一个名为O.DLL的DLL,并发布此DLL的API,并为O.DLL提供一个导入库.假设O.DLL安装在\C\BIN\O.DLL.O.DLL静态链接到名为U.DLL的DLL,安装在\C\BI