一个菜鸟的dll问题
在msdn中有关于dll调用的一段话:
// File: RUNTIME.C
// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from MYPUTS.DLL.
#include <stdio.h>
#include <windows.h>
typedef VOID (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary("myputs");
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");
// If the function address is valid, call the function.
if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}
高手们都清楚吧!我想知道其中的 MYPROC 是什么,说具体些阿
问题点数:50、回复次数:13Top
1 楼weixiao(:D)回复于 2002-03-08 18:16:02 得分 5
回调函数,即由系统调用而不是你在自己代码中调用的函数:)Top
2 楼coffeefish(咖啡鱼)回复于 2002-03-08 18:23:52 得分 0
那么在我的dll文件中是指哪一段函数啊Top
3 楼finalvictory(打倒小日本!)回复于 2002-03-08 18:25:37 得分 5
MYPROC是用户自定义的数据类型(一个函数指针),通过GetProcAddress为ProcAdd赋值,从而得到函数地址,就可以调用DLL中的函数了。Top
4 楼finalvictory(打倒小日本!)回复于 2002-03-08 18:27:34 得分 0
你做DLL的时候在.DEF文件中指定要EXPORT的函数,类型必须匹配。这里就是那个叫myPuts的函数(假定的)。Top
5 楼coffeefish(咖啡鱼)回复于 2002-03-08 18:28:11 得分 0
那么用户是在哪里自定义这个数据类型呢Top
6 楼finalvictory(打倒小日本!)回复于 2002-03-08 18:29:03 得分 30
头上的typdef语句定义了这个函数类型。Top
7 楼kelvin1945(休斯敦的沙拉)回复于 2002-03-08 18:30:01 得分 0
指你在dll中打算被别人调用的函数
在myputs中可以这样写:
__declspec(dllexport) void myPuts(LPSTR szMsg)
{
//dosomething......
}
Top
8 楼coffeefish(咖啡鱼)回复于 2002-03-08 18:40:18 得分 0
如果我有3个引出函数
要不要写3个类似
typedef VOID (*MYPROC)(LPTSTR); 的语句?
Top
9 楼kelvin1945(休斯敦的沙拉)回复于 2002-03-08 18:57:06 得分 10
当然Top
10 楼coffeefish(咖啡鱼)回复于 2002-03-08 19:25:35 得分 0
鎴戣瘯涓€涓Top
11 楼coffeefish(咖啡鱼)回复于 2002-03-08 20:06:09 得分 0
我按照visual c++6.0技术内幕方法,编写了一个mfc正规DLL,就是求平方根的。
但是在实验这个dll时候,一直提示该程序出现非法操作,为什么啊?奇怪啊
cpp中的代码如下:
extern "C" __declspec(dllimport) double SqrtRoot(double d); // DLL导入函数1
typedef double (*SQRTPROC)(double);
HICON m_hIcon;
HINSTANCE hinstLib;
SQRTPROC* pSqrtFunc;
hinstLib = ::LoadLibrary("SqrtDLL.dll");
pSqrtFunc = (SQRTPROC*)::GetProcAddress(hinstLib,"SqrtRoot");
double dig = (*pSqrtFunc)(64.0);
Top
12 楼coffeefish(咖啡鱼)回复于 2002-03-08 20:14:24 得分 0
后来调试发现,只要有double dig = (*pSqrtFunc)(64.0);
这条语句,就报错
为什么Top
13 楼kelvin1945(休斯敦的沙拉)回复于 2002-03-09 12:45:29 得分 0
double dig = pSqrtFunc(64.0);
Top




