是这样的:我写了一个dll,在exe内调用它的接口时,一直报错。
请大家帮忙看看,问题可能出在哪?dll内是这样的:
extern "C" _declspec(dllexport) void Upload(CString& strBatch, CString& strVersion, THREADDATA* pData, BOOL bReUpload)
//extern "C" _declspec(dllexport) void Upload(CString strBatch, CString strVersion, THREADDATA* pData, BOOL bReUpload=FALSE)
{
CDmObject *pDmObj = CDmObject::Instance();
if( pDmObj ){
try {
pDmObj->Upload(strBatch, strVersion, pData, bReUpload);
}
catch(...){
}
}
}
CDmObject的定义大致是这样的:
class CDmObject
{
private:
static CDmObject* __instance;
public:
CDmObject();
~CDmObject();
static CDmObject* Instance();
private:
BOOL LoadMetaData(CString& strBatch,CString& strVersion,CEcmProcess *pEcmPro);
BOOL IsBatchExpired(int nStatus);
BOOL IsCheckOutTimeOut(CString strLastTime);
int CheckInBySocket(LPCSTR lpBatch);
BOOL GetConfigValue();
public:
};exe内的调用:
//THREADDATA* pData;
THREADDATA* pThreadData=new THREADDATA;
CoInitialize(NULL);
(*m_fnUpload)(strBatch, strVersion, pThreadData, bReUpload); //这一步报错,提示“0x7c92100b 处最可能的异常: 0xC0000005: 读取位置 0x00000034 时发生访问冲突”
CoUninitialize();
请大家帮忙看看,问题可能出在哪?dll内是这样的:
extern "C" _declspec(dllexport) void Upload(CString& strBatch, CString& strVersion, THREADDATA* pData, BOOL bReUpload)
//extern "C" _declspec(dllexport) void Upload(CString strBatch, CString strVersion, THREADDATA* pData, BOOL bReUpload=FALSE)
{
CDmObject *pDmObj = CDmObject::Instance();
if( pDmObj ){
try {
pDmObj->Upload(strBatch, strVersion, pData, bReUpload);
}
catch(...){
}
}
}
CDmObject的定义大致是这样的:
class CDmObject
{
private:
static CDmObject* __instance;
public:
CDmObject();
~CDmObject();
static CDmObject* Instance();
private:
BOOL LoadMetaData(CString& strBatch,CString& strVersion,CEcmProcess *pEcmPro);
BOOL IsBatchExpired(int nStatus);
BOOL IsCheckOutTimeOut(CString strLastTime);
int CheckInBySocket(LPCSTR lpBatch);
BOOL GetConfigValue();
public:
};exe内的调用:
//THREADDATA* pData;
THREADDATA* pThreadData=new THREADDATA;
CoInitialize(NULL);
(*m_fnUpload)(strBatch, strVersion, pThreadData, bReUpload); //这一步报错,提示“0x7c92100b 处最可能的异常: 0xC0000005: 读取位置 0x00000034 时发生访问冲突”
CoUninitialize();
解决方案 »
- [求助]VC向一个窗口发送一个键盘事件 TAB
- 如何把 const char * buf 的数据以十六进制显示出来?
- 大家有没好的远程控制封装类源码?
- 把鼠标从一个窗口移动到另一个窗口,能得到这个窗口的句柄吗?
- DirectX: DirectDraw: Overlay页面不能设置Clipper?高手指教
- 求助:显示图像的问题
- 怎样将一个CListBox 中的某一项变灰,即不可选?
- ado如何执行这样的语句???
- 有关初始化问题
- 各位帮个忙:向一个滚动条发送什么消息,才能让它滚动?
- 麻烦来个大牛帮我下吧,我都换了几个号提了几次问了 关于ClearCommError的问题,先谢谢了!
- 用mfc访问本地ftp服务器(急)
实现函数贴出来看看
断点打在这,根本就没走到…
打在pDmObj->Upload内部也是[/img][img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/40.gif]
替换后就没有问题了。就是接口定义不统一的问题(dll那边最后一个参数有默认值,而exe这边没有)。
麻烦各位了(o(╯□╰)o
库接口别用那种CString和stdstring,而用char*代替,
因为不同编译环境CString和stdstring等复杂结构内存分不一定一样