环境:
VS2005
描述:
在一个dll中有一个导出类,里面定义一个接口,参数是一个vector的引用,试图在接口中实现对这个vector的修改。
参数可以正确传入接口中,并且在其中更改有效,但当函数调用完毕返回exe的时候,发现那个vector并没有被更改。
问题:
在接口中可以参数可以是vector的引用吗?如何才能让vector在接口中的更改反映到接口外面?源代码:
// 头文件.H
#ifdef VIDEO_DLL
#define VIDEO_DLL_DECLARE _declspec(dllexport)
#define EXPIMP_TEMPLATE
#else
#define VIDEO_DLL_DECLARE _declspec(dllimport)
#define EXPIMP_TEMPLATE extern
#endifEXPIMP_TEMPLATE template class VIDEO_DLL_DECLARE std::vector<wstring>;class VIDEO_DLL_DECLARE CVideo
{
public:
CVideo(void);
~CVideo(void);public:
void Test(WStringArray& words);
};#endif
///////////////////////////////////////////////////////////////////////////
// CPP文件
void CVideo::Test(WStringArray& words)
{
// 在这个地方修改words
}
////////////////////////////////////////////////////////////////////////////
// 测试程序EXE
CVideo video;
WStringArray words;
video.Test(words); // 执行完之后发现words并没有被更改,而且words没有任何元素PS:跟踪到CPP文件的时候,发现在函数里面words确实发生了变更,何以函数调用结束之后,words还是原来那样?
VS2005
描述:
在一个dll中有一个导出类,里面定义一个接口,参数是一个vector的引用,试图在接口中实现对这个vector的修改。
参数可以正确传入接口中,并且在其中更改有效,但当函数调用完毕返回exe的时候,发现那个vector并没有被更改。
问题:
在接口中可以参数可以是vector的引用吗?如何才能让vector在接口中的更改反映到接口外面?源代码:
// 头文件.H
#ifdef VIDEO_DLL
#define VIDEO_DLL_DECLARE _declspec(dllexport)
#define EXPIMP_TEMPLATE
#else
#define VIDEO_DLL_DECLARE _declspec(dllimport)
#define EXPIMP_TEMPLATE extern
#endifEXPIMP_TEMPLATE template class VIDEO_DLL_DECLARE std::vector<wstring>;class VIDEO_DLL_DECLARE CVideo
{
public:
CVideo(void);
~CVideo(void);public:
void Test(WStringArray& words);
};#endif
///////////////////////////////////////////////////////////////////////////
// CPP文件
void CVideo::Test(WStringArray& words)
{
// 在这个地方修改words
}
////////////////////////////////////////////////////////////////////////////
// 测试程序EXE
CVideo video;
WStringArray words;
video.Test(words); // 执行完之后发现words并没有被更改,而且words没有任何元素PS:跟踪到CPP文件的时候,发现在函数里面words确实发生了变更,何以函数调用结束之后,words还是原来那样?
WStringArray **这样传进去行不?
不要做修改,因为在dll中赋值会引起内存分配释放不再一个模块的问题.不然你看看那个API使用了STL的东西?就是因为有问题.
而且STL这东西没二进制标准,非常的不通用.