首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

动态库接口有关问题

2013-04-09 
动态库接口问题是这样的:我写了一个dll,在exe内调用它的接口时,一直报错。请大家帮忙看看,问题可能出在哪?d

动态库接口问题
是这样的:我写了一个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();


[解决办法]
没见过这样调用动态库的,一般都是LoadLibrary加载动态库,然后GetProcAddress()获得接口函数指针,然后访问;或者静态链接,直接调用函数
ps:动态链接库接口参数一般尽量用基础数据类型(CString 用char*)
[解决办法]
跟踪调试一下,dll也是你写的,拖到一个工程里面调试 看看有没有进入unload函数 或者不是接口的问题而是upload里面
[解决办法]
看看m_fnUpload是不是空指针
然后用Depends.exe看看导出函数和你声明的是不是一样

热点排行