DLL中调用DLL的问题

gpgshen 2013-05-14 09:08:56
急问

应用户要求需我开发一个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); 程序就崩溃了
请各位大神帮忙~
...全文
661 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
心留 2013-06-23
  • 打赏
  • 举报
回复
char* p = ""; 隐含的意思是p为const的 用char *p = new char[128];试试 应该就是这个原因
lijianli9 2013-06-21
  • 打赏
  • 举报
回复
调用约定的错误不是这个错误,那个是fun返回才会造成的。建议lz换换参数看看。
sizyx 2013-06-20
  • 打赏
  • 举报
回复
两种情况 1.DLL的调用约定不一致 __stdcall或 __cedel 2.参数个数或类型 和 被调用的DLL定义的不一致
能哥 2013-06-17
  • 打赏
  • 举报
回复
估计是调用约定不同,查看DLL导出函数调用约定
Saleayas 2013-05-18
  • 打赏
  • 举报
回复
看看人家提供的样例,并且执行。 如果没有样例,那么认真看看接口的契约。 看看调用参数的要求和调用序列。 如果上面什么都没有,换一家吧。
小赵123456 2013-05-18
  • 打赏
  • 举报
回复
同命相联啊,我是调用别人的DLL,可以拿到函数地址,一调用就是不能read
西山小月 2013-05-17
  • 打赏
  • 举报
回复
char* p = ""; func_INIT(p); 这么写对吗?不需要分配内存?空指针传地址进去做什么?内部会自动分配内存吗?
spotatoes 2013-05-17
  • 打赏
  • 举报
回复
SiInterface.dll 看看里面声明的INIT函数是不是和typedef int (WINAPI*lpFun1)(char*); 一样的 应该类似 int WINAPI INIT(char*){ }
oyljerry 2013-05-16
  • 打赏
  • 举报
回复
你调用函数传递的参数等估计有问题。其次函数调用约定是否正确 __stdcall?
ouyh12345 2013-05-14
  • 打赏
  • 举报
回复
char* p = ""; 隐含的意思是p为const的 用char *p = new char[128];试试

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧