这段代码来自:
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;117428#appliestotypedef void (CALLBACK *ULPRET)(UINT,LPINT);void func1(void)
{
HINSTANCE hLib;
ULPRET lpfnDLLProc;
UINT param1 = 1;
int param2; hLib = LoadLibrary ("dll1.dll");
if (hLib)
{
lpfnDLLProc = (ULPRET) GetProcAddress (hLib,"DLLProc");
(*lpfnDLLProc) (param1, (LPINT)¶m2);//这句不懂。。
FreeLibrary (hLib);
}
}请问大家,我注释的那句什么意思?
是不是定义被掉函数的参数形式?
param1,param2分别干什么的?
我有个测试的函数:
int DLLProc(int i)
{
return i+1;
}
请问这个函数没有问题吧,
如果没问题的话,我不懂的那句该怎么改?
我直接没改,测试了一下,VS2005的
结果出错:Run-Time Check Failure #0......感谢大家帮个忙,谢谢了!!!
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;117428#appliestotypedef void (CALLBACK *ULPRET)(UINT,LPINT);void func1(void)
{
HINSTANCE hLib;
ULPRET lpfnDLLProc;
UINT param1 = 1;
int param2; hLib = LoadLibrary ("dll1.dll");
if (hLib)
{
lpfnDLLProc = (ULPRET) GetProcAddress (hLib,"DLLProc");
(*lpfnDLLProc) (param1, (LPINT)¶m2);//这句不懂。。
FreeLibrary (hLib);
}
}请问大家,我注释的那句什么意思?
是不是定义被掉函数的参数形式?
param1,param2分别干什么的?
我有个测试的函数:
int DLLProc(int i)
{
return i+1;
}
请问这个函数没有问题吧,
如果没问题的话,我不懂的那句该怎么改?
我直接没改,测试了一下,VS2005的
结果出错:Run-Time Check Failure #0......感谢大家帮个忙,谢谢了!!!
解决方案 »
- 一个简单的IOCP(IO完成端口)服务器/客户端类
- 界面方面的书
- 急!请教如何打印条形码(使用条码打印机)?
- MFC中怎样让Button控件也可以有OnMouseMove事件,高手请指点!!
- Direct和MCI问题,高分发了!!!!!!!!!!!!!!!!!!!!看看看!!!!!!!!!
- ●===TTS怎样设置发音的性别?(内详)===●
- 小弟请教一个问题,是关于数据库SQL SERVER和网络的,请高手给点意见!谢了
- 输出一个__int64类型的整数是用%l64么?
- SDI与MDI在编程中的区别?视和文档呢?
- 怎样判断文档是否已经打开?
- 求控件的应用函数!!
- MSDN for Visual Studio 6 的最新版本是哪一个版本啊?
那个测试的函数已经生成DLL了,放在了新项目的目录下
去掉我注释的那一句编译没有问题
(*lpfnDLLProc) (param1, (LPINT)¶m2);就是调用这个函数,建议看看C语言的指针部分.
我知道lpfnDLLProc就是函数的指针
也知道(*lpfnDLLProc) (param1, (LPINT)¶m2) 就是执行被调用的函数
但是我对其中的参数有点疑惑
为什么要传UINT型的param1、为什么又要把int型的param2取址并转换为LPINT型?
如果说是原函数需要的话
那,这样的原函数
int DLLProc(int i)
{
return i+1;
}
是不是应该写:(*lpfnDLLProc) (param2);//int param2
但是不正确啊
哪位大虾帮忙就上面这个最简单的函数写个调用,谢谢了!!!
(*lpfnDLLProc) (/* 这里怎么写,谢谢了!*/ );
应该这样写:param2=(*lpfnDLLProc) (param2);//int param2最主要的问题是前面定义写错了
typedef int (_cdecl *ULPRET)(int);
这样就OK了!