调用自己写的MFC dll出错,该如何处理

调用自己写的MFC dll出错,
错误如图:
调用自己写的MFC dll出错,该如何处理
调用自己写的MFC dll出错,该如何处理
下面的代码段为DLL中函数段的实现;
__declspec(dllexport) int ConnectChannel(string _ipAdress)
{
Camera _camera;
_camera.WaitTime=WaitTime;
_camera.TryCount=TryCount;

string ipAdress;
ipAdress=_ipAdress;
if (!ipAdress.empty())
{
_camera.Capture.open(ipAdress);
VideoCap m_video;
m_video.vCap=_camera.Capture;
m_video.vCapID=_camera.camID;
CapVect.push_back(m_video);
}
else
{
return -1;
}

time_t timeBegin, timeEnd;
int temp=0;
timeBegin = time(NULL);
timeEnd = time(NULL);
while(!_camera.Capture.isOpened()&&(timeEnd-timeBegin)<_camera.WaitTime||temp<_camera.TryCount)
{
_camera.Capture.open(ipAdress);
timeEnd = time(NULL);
temp++;
}
if (!_camera.Capture.isOpened())
{
return -1;
}
return _camera.camID;

}


DLL中结构体和类的声明及实现如下:
Camera.h
#pragma once  
#include <opencv2/highgui/highgui.hpp> 
using namespace cv; 
// Camera 命令目标;

class Camera : public CObject
{
private:
static int camNum;
public:
Camera();
public:
 int camID;               //摄像头编号;
 int WaitTime;  //连接等待时间;
 int TryCount;  //连接尝试次数;

VideoCapture Capture;

virtual ~Camera();
};

// Camera.cpp : 实现文件
//

#include "stdafx.h"
#include "BoLiSDK.h"
#include "Camera.h"

int Camera::camNum=1000;
Camera::Camera()
{
camID=++(this->camNum);
WaitTime=0;
TryCount=0;
//Capture=NULL;
}

Camera::~Camera()
{
}

结构体:
#include <opencv2/highgui/highgui.hpp> 
using namespace cv; 

//定义结构体,关联摄像头和摄像头ID;
typedef struct VideoCap
{
int vCapID;       //摄像头ID;
VideoCapture vCap;//摄像头;
}VideoCap;

//定义结构体,关联录制视频及其ID;
typedef struct VideoWrite
{
int vWriteID; //正录制的视频的ID;
bool  IsRecord; //判断是否正在录制过程中;
VideoWriter vWrite; //录制的视频;
}VideoWrite;

DLL中全局变量的声明如下:
vector<VideoCap> CapVect(20);   //摄像头结构体向量;
vector<VideoWrite> WriteVect(20); //录制视频结构体向量;

int WaitTime;  //连接等待时间;
int TryCount;  //连接尝试次数;

------解决方案--------------------
哪个DLL申请内存,哪个DLL释放内存;STL容器不能跨DLL使用。
源头似乎是每个EXE和DLL都有各自的内存管理堆,一个堆不能释放由另一个堆管理的内存,传地址没用
------解决方案--------------------
ConnectChannel(string _ipAdress)形参用string应该没太大问题,如果是非const引用或指针就有问题。不过还是不推荐写DLL接口时使用STL。我觉得出错的地方应该是全局vector的使用,就像8楼说的。exe和DLL有可能操作同一个vector,不可避免的会有push导致的重分配内存。