以下这一程序段,为什么要定义typedef IUnknown * (*CREATEFUNCPTR)();typedef IUnknown * (*CREATEFUNCPTR)();
IUnknown* CallCreateInstance(char* name)
{
...
...
CREATEFUNCPTR CreateInstance //这是得到DLL中的CreateInstance的地址
=(CREATEFUNCPTR)::GetProcAddress(hComponent,"CreateInstance");
...
...
return CreateInstance;
}为什么在程序中要将IUnknown定义成typedef IUnknown * (*CREATEFUNCPTR)();直接在程序中用IUnknown*是不是一样,例如改成以下:IUnknown* CallCreateInstance(char* name)
{
...
...
IUnknown* CreateInstance
...
...
...
return CreateInstance;
}(* Name)()这种形式是怎么回事?
IUnknown* CallCreateInstance(char* name)
{
...
...
CREATEFUNCPTR CreateInstance //这是得到DLL中的CreateInstance的地址
=(CREATEFUNCPTR)::GetProcAddress(hComponent,"CreateInstance");
...
...
return CreateInstance;
}为什么在程序中要将IUnknown定义成typedef IUnknown * (*CREATEFUNCPTR)();直接在程序中用IUnknown*是不是一样,例如改成以下:IUnknown* CallCreateInstance(char* name)
{
...
...
IUnknown* CreateInstance
...
...
...
return CreateInstance;
}(* Name)()这种形式是怎么回事?
CREATEFUNCPTR CreateInstance;定义的是一个函数指针
指向的函数类似于这样
IUnknown* foo();
因此可以
CreateInstance = foo;
指向的函数类似于这样
IUnknown* foo();你不是将它换过来了?
IUnknown* foo();
这里的foo只是一个函数名
CREATEFUNCPTR CreateInstance;
CreateInstance才是一个函数指针,它的类型是
IUnknown (*)(),即 CREATEFUNCPTR
HRESULT hr=::CoCreateInstance(CLSID_Component1,NULL,CLSCTX_INPROC_SERVER,IID_IX,(void**)&pIX);
if(SUCCEEDED(hr))
{
pIX->Fx();
pIX->Release();
}
以上是使用CoCreateInstance通过类厂创建组件,1.在其前面有 :: 是不是一定要加,加上是代表什么意思?2.是不是凡是 void** ppv 的形式的都是输出参数?