急问应用户要求需我开发一个dll给他们调用,在我这个dll中再调用某公司的医保dll。但是我在调用时dll可以正确加载,用GetProcAddress也可以获得函数地址。但是一旦执行函数程序就直接崩溃,弹窗显示的是 "0x00e526c5"指令引用的"0x100215f0"内存。该内存不能为"weitten"。部分代码如下声明:
typedef int (WINAPI*lpFun1)(char*);
typedef int (WINAPI*lpFun2)(char*,char*);HINSTANCE m_hDll;
lpFun1 func_INIT;
lpFun2 func_BUSINESS_HANDLE;extern "C" __declspec(dllexport) void Mes();实现函数:extern "C" __declspec(dllexport) void Mes() 
{
m_hDll = LoadLibrary(_T("SiInterface.dll"));
if (NULL == m_hDll)
{
AfxMessageBox(_T("DLL加载失败"));
return;
}
AfxMessageBox(_T("DLL加载成功"));
func_INIT = (lpFun1)GetProcAddress(m_hDll,"INIT");
func_BUSINESS_HANDLE = (lpFun2)GetProcAddress(m_hDll,"BUSINESS_HANDLE"); char* p = "";
func_INIT(p);
}执行到   func_INIT(p);   程序就崩溃了
请各位大神帮忙~VCMFCDLL动态链接库windows

解决方案 »

  1.   

    char* p = "";
    隐含的意思是p为const的
    用char *p = new char[128];试试
      

  2.   

    你调用函数传递的参数等估计有问题。其次函数调用约定是否正确 __stdcall?
      

  3.   

    SiInterface.dll 看看里面声明的INIT函数是不是和typedef int (WINAPI*lpFun1)(char*); 一样的
    应该类似 
    int WINAPI INIT(char*){
    }
      

  4.   

    char* p = "";
    func_INIT(p);这么写对吗?不需要分配内存?空指针传地址进去做什么?内部会自动分配内存吗?
      

  5.   

    同命相联啊,我是调用别人的DLL,可以拿到函数地址,一调用就是不能read
      

  6.   

    估计是调用约定不同,查看DLL导出函数调用约定
      

  7.   

    两种情况
    1.DLL的调用约定不一致  __stdcall或  __cedel
    2.参数个数或类型 和 被调用的DLL定义的不一致
      

  8.   

    调用约定的错误不是这个错误,那个是fun返回才会造成的。建议lz换换参数看看。
      

  9.   

    char* p = "";
    隐含的意思是p为const的
    用char *p = new char[128];试试 应该就是这个原因