急问应用户要求需我开发一个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
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
隐含的意思是p为const的
用char *p = new char[128];试试
应该类似
int WINAPI INIT(char*){
}
func_INIT(p);这么写对吗?不需要分配内存?空指针传地址进去做什么?内部会自动分配内存吗?
1.DLL的调用约定不一致 __stdcall或 __cedel
2.参数个数或类型 和 被调用的DLL定义的不一致
隐含的意思是p为const的
用char *p = new char[128];试试 应该就是这个原因