- 用GCC命令;
- 用VC自带的命令;
- Source Insight工具;
1,在GCC下,可以使用命令-E
如下面的代码
#include
<
objbase.h
>
#include < initguid.h >
#undef INTERFACE
#define INTERFACE IExample
DECLARE_INTERFACE_ (INTERFACE, IUnknown)
{
STDMETHOD (QueryInterface) (THIS_ REFIID, void **) PURE;
STDMETHOD_ (ULONG, AddRef) (THIS) PURE;
STDMETHOD_ (ULONG, Release) (THIS) PURE;
STDMETHOD (SetString) (THIS_ char *) PURE;
STDMETHOD (GetString) (THIS_ char *, DWORD) PURE;
} ;
#include < initguid.h >
#undef INTERFACE
#define INTERFACE IExample
DECLARE_INTERFACE_ (INTERFACE, IUnknown)
{
STDMETHOD (QueryInterface) (THIS_ REFIID, void **) PURE;
STDMETHOD_ (ULONG, AddRef) (THIS) PURE;
STDMETHOD_ (ULONG, Release) (THIS) PURE;
STDMETHOD (SetString) (THIS_ char *) PURE;
STDMETHOD (GetString) (THIS_ char *, DWORD) PURE;
} ;
代码的作用先不用管,将它保存为test.h或其它格式的文件,命令行下输入
gcc -E test.h >>E:/out.txt
打开E盘的out.txt文件,在该文件的最下面可以看到如下的内容
typedef
struct
IExample
{ struct IExampleVtbl *lpVtbl; }
IExample; typedef
struct
IExampleVtbl IExampleVtbl;
struct
IExampleVtbl
{
HRESULT(__attribute__((__stdcall__)) *QueryInterface) (IExample *, const IID* const, void **) ;
ULONG(__attribute__((__stdcall__)) *AddRef) (IExample *) ;
ULONG(__attribute__((__stdcall__)) *Release) (IExample *) ;
HRESULT(__attribute__((__stdcall__)) *SetString) (IExample *, char *) ;
HRESULT(__attribute__((__stdcall__)) *GetString) (IExample *, char *, DWORD) ;
} ;
{
HRESULT(__attribute__((__stdcall__)) *QueryInterface) (IExample *, const IID* const, void **) ;
ULONG(__attribute__((__stdcall__)) *AddRef) (IExample *) ;
ULONG(__attribute__((__stdcall__)) *Release) (IExample *) ;
HRESULT(__attribute__((__stdcall__)) *SetString) (IExample *, char *) ;
HRESULT(__attribute__((__stdcall__)) *GetString) (IExample *, char *, DWORD) ;
} ;
__attribute__是gcc的关键字,用以描述变量属性。
2,在VC下,也是可以,在Project->Setting->C/C++/最下面的Project Option的最后面添加/P命令
Rebuild All后,会提示一些错误,没关系,在保存该project的目录下会有一个.i的文件,打开后
也可以在相应的位置找到跟out.txt相同的内容。
3,Source Insight 下也可以,不过没测试过