请问typedef IUnknown* (*CREATEFUNCPTR)()是什么用法

时间:2021-04-29 02:41:53

typedef    后面加个函数名 这怎么理解?
还有下面这段代码 是显示链接动态链接库的
看我的注释的地方
void CMainFrame::OnViewDll() 
{
typedef void (MYGOD)(void);  //这个怎么理解
HINSTANCE hDLL;
MYGOD* pFunction;
         hDLL=::LoadLibrary("MyDll.dll");
          
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思? (MYGOD*)::GetProcAddress 为什么是这样?  (MYGOD*)::  ???
        (*pFunction)();
::FreeLibrary(hDLL);
}


请高手帮我解释一下我注释的这两句话
typedef IUnknown* (*CREATEFUNCPTR)()  和 typedef void (MYGOD)(void);

(MYGOD*)::GetProcAddress(hDLL,"Hello");  前面的(MYGOD*) 是干吗的
为什么要::    ?

14 个解决方案

#1


typedef void (MYGOD)(void);  定义函数
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思? 
获得Hello函数指针地址,Hello函数为void Hello(),pFunction为函数指针的地址。

#2


typedef void (MYGOD)(void);
突然不知道要说成定义函数,还是定义函数指针的。因为看起来不只函数指针的,但却是为了得到函数指针

#3


对了,忘记说了
::表示全局

#4


typedef void (MYGOD)(void);  //这个怎么理解
MYGOD* pFunction;

这是定义一个函数指针,所指函数原型为 void fun(void);

通常写作
typedef void (*MYGOD)(void);  //这个怎么理解
MYGOD pFunction;

pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思
这是通过GetProcAddress从dll中获得函数"Hello"的地址,然后强制转化成MYGOD*类型

#5


freefalcon(心宇) :
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思
这是通过GetProcAddress从dll中获得函数"Hello"的地址,然后强制转化成MYGOD*类型

你说的这个和  UPCC(我是菜鸟)(我就喜欢---灌) 
::表示全局
  
好象不一样,这里 :: 到底表示什么 我想应该不是表示全局的意思


typedef void (MYGOD)(void);  这个说是定义  但是怎么理解?

#6


::PostMessage(...)
楼主你给出的是vc的内容,那么我上面的函数你应该看过的吧?
(MYGOD*)  ::GetProcAddress(hDLL,"Hello");//获得一个函数,函数的格式为MYGOD指向的格式,函数名为Hello.

::GetProcAddress(hDLL,"Hello");//是一个全局的函数,不属于那一个类的。(MYGOD*)只是一个类型转化而已。

typedef是定义新类型的操作符,本来一般的函数指针是这样的(我熟悉的格式)
typedef void (*MYGOD)(void);  //*  定义一个函数指针MYGOD。

#7


upcc和我说的没有冲突啊
GetProcAddress是一个API,加上域操作符仅仅强调它是全局函数,这里你不加也可以

关于
typedef void (MYGOD)(void);
你得了解typedef的用法

应该知道
typedef int INT;
INT a = 10; // a 即为int类型

那么上面便是定义了MYGOD为函数原型void foo(void)

#8


UPCC(我是菜鸟)(我就喜欢---灌) :  
    我明白了 (MYGOD*)  ::GetProcAddress(hDLL,"Hello");
  是我理解错了

-------------------------------------------------

我知道typedef的常规用法 但是在这里
typedef void (MYGOD)(void);  定义的是个什么?  函数指针? 是否代表函数的返回值和参数都是void?  
这个和 typedef void (*MYGOD)(void);  有什么区别?
MYGOD pFunction;  这个又定义的什么了?
typedef IUnknown* (*CREATEFUNCPTR)() 这个有两个*  又怎么理解?

#9


typedef void (MYGOD)(void);  定义的是个什么?  函数指针? 是否代表函数的返回值和参数都是void?
  


这个和 typedef void (*MYGOD)(void);  有什么区别?
 没什么区别,就在在运用是不同而已。
在帖字的是
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");
但假如用typedef void (*MYGOD)(void);  就变成了
pFunction=(MYGOD)::GetProcAddress(hDLL,"Hello");

#10


MYGOD pFunction;  这个又定义的什么了?

MYGOD 在typedef后其实也是一个类型了,类型当然可以定义类型变量啦,就是这个道理。
定义一个指针变量的变量

typedef IUnknown* (*CREATEFUNCPTR)() 这个有两个*  又怎么理解?
因为返回值为IUnknown* ,返回值不是void了。其他一样函数指针,你应该知道了吧?

我不是故意多次发的,而是发后才知道的。

#11


typedef IUnknown* (*CREATEFUNCPTR)() 这个有两个*  又怎么理解?

是不是个 返回值指向 IUnknown 指针的函数指针?

#12


哈哈 差不多我们在同一时间回贴了
我都觉得30分不足以表达我的谢意了
加分结贴

#13


typedef IUnknown* (*CREATEFUNCPTR)() 的函数需要这样的定义
IUnknown* fun(void){...}//其他的我在上面说了啊。
要是还不知道就要让 freefalcon(心宇) ( )告诉你了。因为我文笔差

#14


谢谢了

我明白了

#1


typedef void (MYGOD)(void);  定义函数
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思? 
获得Hello函数指针地址,Hello函数为void Hello(),pFunction为函数指针的地址。

#2


typedef void (MYGOD)(void);
突然不知道要说成定义函数,还是定义函数指针的。因为看起来不只函数指针的,但却是为了得到函数指针

#3


对了,忘记说了
::表示全局

#4


typedef void (MYGOD)(void);  //这个怎么理解
MYGOD* pFunction;

这是定义一个函数指针,所指函数原型为 void fun(void);

通常写作
typedef void (*MYGOD)(void);  //这个怎么理解
MYGOD pFunction;

pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思
这是通过GetProcAddress从dll中获得函数"Hello"的地址,然后强制转化成MYGOD*类型

#5


freefalcon(心宇) :
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");//这个是什么意思
这是通过GetProcAddress从dll中获得函数"Hello"的地址,然后强制转化成MYGOD*类型

你说的这个和  UPCC(我是菜鸟)(我就喜欢---灌) 
::表示全局
  
好象不一样,这里 :: 到底表示什么 我想应该不是表示全局的意思


typedef void (MYGOD)(void);  这个说是定义  但是怎么理解?

#6


::PostMessage(...)
楼主你给出的是vc的内容,那么我上面的函数你应该看过的吧?
(MYGOD*)  ::GetProcAddress(hDLL,"Hello");//获得一个函数,函数的格式为MYGOD指向的格式,函数名为Hello.

::GetProcAddress(hDLL,"Hello");//是一个全局的函数,不属于那一个类的。(MYGOD*)只是一个类型转化而已。

typedef是定义新类型的操作符,本来一般的函数指针是这样的(我熟悉的格式)
typedef void (*MYGOD)(void);  //*  定义一个函数指针MYGOD。

#7


upcc和我说的没有冲突啊
GetProcAddress是一个API,加上域操作符仅仅强调它是全局函数,这里你不加也可以

关于
typedef void (MYGOD)(void);
你得了解typedef的用法

应该知道
typedef int INT;
INT a = 10; // a 即为int类型

那么上面便是定义了MYGOD为函数原型void foo(void)

#8


UPCC(我是菜鸟)(我就喜欢---灌) :  
    我明白了 (MYGOD*)  ::GetProcAddress(hDLL,"Hello");
  是我理解错了

-------------------------------------------------

我知道typedef的常规用法 但是在这里
typedef void (MYGOD)(void);  定义的是个什么?  函数指针? 是否代表函数的返回值和参数都是void?  
这个和 typedef void (*MYGOD)(void);  有什么区别?
MYGOD pFunction;  这个又定义的什么了?
typedef IUnknown* (*CREATEFUNCPTR)() 这个有两个*  又怎么理解?

#9


typedef void (MYGOD)(void);  定义的是个什么?  函数指针? 是否代表函数的返回值和参数都是void?
  


这个和 typedef void (*MYGOD)(void);  有什么区别?
 没什么区别,就在在运用是不同而已。
在帖字的是
pFunction=(MYGOD*)::GetProcAddress(hDLL,"Hello");
但假如用typedef void (*MYGOD)(void);  就变成了
pFunction=(MYGOD)::GetProcAddress(hDLL,"Hello");

#10


MYGOD pFunction;  这个又定义的什么了?

MYGOD 在typedef后其实也是一个类型了,类型当然可以定义类型变量啦,就是这个道理。
定义一个指针变量的变量

typedef IUnknown* (*CREATEFUNCPTR)() 这个有两个*  又怎么理解?
因为返回值为IUnknown* ,返回值不是void了。其他一样函数指针,你应该知道了吧?

我不是故意多次发的,而是发后才知道的。

#11


typedef IUnknown* (*CREATEFUNCPTR)() 这个有两个*  又怎么理解?

是不是个 返回值指向 IUnknown 指针的函数指针?

#12


哈哈 差不多我们在同一时间回贴了
我都觉得30分不足以表达我的谢意了
加分结贴

#13


typedef IUnknown* (*CREATEFUNCPTR)() 的函数需要这样的定义
IUnknown* fun(void){...}//其他的我在上面说了啊。
要是还不知道就要让 freefalcon(心宇) ( )告诉你了。因为我文笔差

#14


谢谢了

我明白了