遇到这个问题真是难,猜不到是哪里的问题;
具体情况如下:CTSCARD_API int fnCtsCard(void);
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplu__declspec(dllexport) void __stdcall Init(int *count);
__declspec(dllexport) bool __stdcall Start();
__declspec(dllexport) void __stdcall Reset(int *ret);#ifdef __cplusplus
}
#endif // __cplusplus这是我的DLL文件里的,,就是start是bool型的,就是它出错
我在主程序里是这样的
CDataDll::CDataDll(CString sPath){
hLib=LoadLibrary(sPath);
if(hLib!=NULL)
{
Init        =(INIT)GetProcAddress(hLib,"Init");
Start       =(START)GetProcAddress(hLib,"Start");
Stop        =(STOP)GetProcAddress(hLib,"Stop");
Dispose     =(DISPOSE)GetProcAddress(hLib,"Dispose");
}}在别的地方动态创建,有的很正常,另一个地方不知道怎么搞的,一执行到xx->Start()就报标题的错了。

解决方案 »

  1.   

    Start的实现是什么,你是64位的?
      

  2.   

    Start里怎么定义的?里面怎么写的?
      

  3.   

    找了很久,发现是这样的:正常情况,我是用CFileDialog去选DLL的路径,然后调上面的函数,正常
    不正常的情况,我是用CFileDialog去选另一个文件,路径和存放DLL的路径不一样,这个文件里面存有DLL的路径,然后调上面的函数,就不正常。没办法我试过,如果把这个文件的路径跟那个DLL放在一起或者放在DLL的上一级路径 就正常,
    这个我真的很无奈,不理解
      

  4.   

    如果在调函数之前,加这么一句
    CFileDialog FileDialog(TRUE,NULL,".dll",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_EXPLORER,NULL,NULL);
    FileDialog.m_ofn.lpstrFilter="DLL File(.DLL)\0*.dll\0";
    FileDialog.DoModal();
    将调用该函数的文件选一下,就可成功,不选就不行,,我判断是路径的问题,CFileDialog把一个路径指向了最近打开的文件夹,如果路径不在一个目录下,调用就不成功,杂个办