描述:
BOOL _stdcall DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID /*lpReserved*/)
{
return TRUE;
}
extern "C"
HRESULT _stdcall DllGetObject(REFCLSID rclsid,REFIID riid,LPVOID* ppv)
{
*ppv=static_cast<IStopwatch*>(new CStopwatch);
return S_OK;
}
这段代码中第一个函数最后的LPVOID/*.....*/是什么意思呢?应该是一个变量吧
而加了这个不是注释么
还有第二个函数那些形式参数能不能给出他们的定义,就是他们代码的类型或结构
我查MSDN,LPVOID是指向无类型的指针,那为什么不用void*呢
谢谢了
解决方案1:
1。
函数的某个形参不使用时可只注明参数的类型,这样可减少参数栈的尺寸。一般保留参数都这样写。
2。
REFCLSID :CLSID&
REFIID: IID&
CLSID和IID都是GUID,是一个128bit的大数据结构,由于一般这种类型的实参都是常量,所以一般都是用引用传值。
这些宏没什么特别的,都是COM和SDK里定义的,宏这东西要么是为了方便,要么是为了提高代码移植性。
1. 把参数注释上了,说明这么参数不用
2. 定义far,是为了了和16位系统兼容,我们知道16位系统中,内存采用了分段和分页两种机制,far就是表示跨段。
而在32位系统中,采用了所谓的flat模式,段寄存器除了一个之外,别的值为零,far也就没有什么用处了。