关于DLL创建和调用的问题————菜鸟级

langjingling 2001-12-27 10:16:15
动态调用DLL中,为什么编译能通过,但运行后去出现非法操作
...全文
230 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wooingcn 2001-12-27
  • 打赏
  • 举报
回复
在Def文件中的EXPORTS段标识要导出的符号列表,所以你在这里定义过了要导出的函数名之后,就不用在函数声明时加前缀了。相反,如果你不用EXPORTS部分,Visual C++可以使用__declspec关键字为函数或变量名添加额外的属性,__declspec有很多可选值,但在dll中一般下面两个很常用,dllexport,dllimport,分别表示函数或变量是从DLL中导出的或是导入到DLL中来的。
langjingling 2001-12-27
  • 打赏
  • 举报
回复
散分啦
darknessun 2001-12-27
  • 打赏
  • 举报
回复
HINSTANCE hInst = LoadLibrary("demo2.dll");
if (hInst)
{
typedef int (WINAPI *ADD)(int, int);
ADD AddFun = NULL;
AddFun = (ADD)GetProcAddress(hInst, "Add");
if (AddFun)
{
int i = AddFun(1, 2);
}
}
langjingling 2001-12-27
  • 打赏
  • 举报
回复
好了,问题得到解决了。原来问题出在DLL中,如果不加.def文件,那么在函数定义时一定要加前缀extern "C" __declspec(dllexport) int Func();
尤其“C”不能少,一少在执行过程中就提示“demo.dll找不到函数链接”,不知道是为什么?
叉叉兄你能帮我解释一下吗,一定给你加分
wooingcn 2001-12-27
  • 打赏
  • 举报
回复
typedef int (* ADD)(int,int) ;
HINSTANCE h;
ADD m_add;
h = LoadLibrary("demo2.dll");
if(h!=NULL)
{
m_add =(ADD )GetProcAddress(h,"Add");
if(m_add!=NULL)
{
CString str;
str.Format("%d",m_add(1,2));
}
else
{
printf("demo.dll找不到函数链接!");
}
FreeLibrary(h);
}
else
{
printf("不能加载demo2.dll!");
}
看看打印出的是什么结果
langjingling 2001-12-27
  • 打赏
  • 举报
回复
可不知道为什么,我这边老是不行
创建的代码如下
extern "C" int __declspec(dllexport) Add(int a,int b)
{


return (a+b);
}
调用的代码如下:
typedef int (* ADD)(int,int) ;
HINSTANCE h;
ADD m_add;
h = LoadLibrary("demo2.dll");
if(h!=NULL)
m_add =(ADD )GetProcAddress(h,"Add");
ASSERT(m_add);
CString str;
str.Format("%d",m_add(1,2));
不知道问题在哪里?
darknessun 2001-12-27
  • 打赏
  • 举报
回复
调用函数有参数吗?你在函数内部改变参数值吗?
wooingcn 2001-12-27
  • 打赏
  • 举报
回复
没有限制,只是申明的时候函数名前加上__deslspec (dllexport):
如:
int __deslspec(dllexport)test();
langjingling 2001-12-27
  • 打赏
  • 举报
回复
我已经把编译好的DLL放在我的DEBUG目录下了
langjingling 2001-12-27
  • 打赏
  • 举报
回复
动态调用时,在DLL内部的函数有什么限制
wooingcn 2001-12-27
  • 打赏
  • 举报
回复
把你的动态库放到系统目录下或者是你的exe文件目录下。
langjingling 2001-12-27
  • 打赏
  • 举报
回复
动态调用时,在DLL中创建函数时有什么限制?
anywn_cwh 2001-12-27
  • 打赏
  • 举报
回复
因为编译的时候没有调用。
darknessun 2001-12-27
  • 打赏
  • 举报
回复
写.def文件!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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