我刚开始学DLL,有一些新概念不懂,请高手讲解。

rfit 2000-06-23 11:52:00
有一个DLL导出这样一个函数:

extern "c" _ _ declspec(dllexport) double SquareRoot(double d);

下面是客户显示到函数的一个例子:

typedef double (SQRTPROC) (double); (1)
HINSTANCE hInstance;
SQRTPROC* pFunction;
VERIFY(hInstance =:: LoadLibrary("c:\\winnt\system32\\mydll.dll"));
VERIFY(pFunction =(*SQRTPROC)::GetProcAddress(hInstance,"SquareRoot"));
double d=(*PFunction)(81.0); (2)

请对上面的代码逐一讲一下,尤其是(1)和(2)
谢谢各位了
...全文
199 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rfit 2000-06-26
  • 打赏
  • 举报
回复
bok2的代码在那呢?
rfit 2000-06-25
  • 打赏
  • 举报
回复
高手快快帮帮我!
rfit 2000-06-25
  • 打赏
  • 举报
回复
to harley:

bok2什么意思?

Thanks
harley 2000-06-25
  • 打赏
  • 举报
回复
你可以看看bok2的代码。它的dll部分讲的很详细。
jak 2000-06-25
  • 打赏
  • 举报
回复
是,类型转换。
rfit 2000-06-24
  • 打赏
  • 举报
回复
pFunction=(SQRTPROC * ) ::GetProcAddress(hInstance,"SquareRoot"));

这句代码中GetProcAddress返回SquareRoot的地址,
为什么要加(SQRTPROC * ),是类型转换吗?

怎么回事,我有些不明白? 谢谢 的帮助
JJONY 2000-06-24
  • 打赏
  • 举报
回复
这是个C中自定义型的问题吧,看一看谭某的书不就有解决啦。
一般(1)我是这样定义的:
typedef double (*SQRTPROC) (double);
这样说明了SQRTPROC是一指针,一个函数的指针。
GetProcAddress是返回一个指针,它可以随意转换成任意函数的指针,当然要对得上所需的函数。如:pFunction =(SQRTPROC)::GetProcAddress(hInstance,"SquareRoot");
(SQRTPROC)转成SquareRoot(double d);这个函数指针
(2)处可以是double d = PFunction(81.0); 就跟一般的函数调用一样了。
E 2000-06-24
  • 打赏
  • 举报
回复
(1)把SQLPROC定义为函数类型,该类型定义的函数带一个double型的参数,返回值为double 型
SQRTPROC* pFunction; 把pFunction定义为指向SQRTPROC类型函数的指针:即只能把带一个double型的参数,且返回值为double 型的函数(如SquareRoot)的起始地址赋给pFunction;
执行pFunction =(*SQRTPROC)::GetProcAddress(hInstance,"SquareRoot"));后pfunction等于dll中SquareRoot的起始地址;
(2) 通过这个起始地址调用SquareRoot

16,466

社区成员

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

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

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