关于dll接口函数返回对象(对象里有vector容器)的一个小小小小小小小小小小小小小问题
我正在用BCB6写一个动态链接库(dll),打算在vc和ActiveX控件里调用。
我要在接口函数里返回一个容器,网上说会有问题,最好是把容器封装到结构体里面,所以我写了一个类,里面含有两个容器,一个vector一个map。
但是当我返回这个类的对象时,并在APP里定义了相同的类,来接收这个对象,可是打印出来之后的东西很乱,是指针指错了内存的症状(我在dll定义的其他毫无相关的变量都打印了出来)。
我想问的是,我这样做是不是可行的。如果可行哪里出错了呢(内存分配?)
如果不行有什么办法传递这个容器呢?(用数组?)
谢谢
[解决办法]
dll最初是用c标准的,因此对容器,TForm等这些最好用activex来做更通用。
[解决办法]
如果在接口里直接传递STL容器,会发生问题,因为很多STL容器含有静态成员,APP和DLL的内存空间又不一样
在dll里定义了一个vector并push_back了一些数据,这个循环结束之后我立即打印出这些数据
请贴代码
[解决办法]
1、有人说str不能为NULL,为什么啊
std::string 造或值,不接受 NULL 指 可以使用 "" ,但不能用 NULL ;
2、但都是设计到字符串,而且还有一一对应的关系,如果不用STL用什么啊 char**?
如果部要使用 std::map , 建DLL接口 std::map 封起,不曝露std::map外部用。DLL使用STL,需要做黑盒理,也就是DLL接口中看不STL模板。
如果非得 std::map 曝露出,那你得 std::map 的文件同,就相於要求人你用同的 STL 版本,而且得查,以保障存局一致,函用方式一。或者你重一可供共用的 std::map 。