在看代码写代码的时候发现两种Guid的定义方式,在此记录一下,这里以创建PEIM Moudle时installPpi时Ppi所用的Guid为例。
第一种就是最普通的方式,既然需要使用一个Guid,我们就在头文件中定义一个Guid就好了,如下:
EFI_GUID gOemPeiTestPeimPpiGuid = {0x2e1e7cae, 0x01fd, 0x4cf7, {0x8f, 0xbe, 0x8, 0xc4, 0x86, 0x82, 0x61, 0x89}};
第二种就是在头文件中并不写明Guid的值,OEM_PEI_TESTPEIM_PPI_GUID这个值只是一个摆设,可能是为了增加代码可读性。
#define OEM_PEI_TESTPEIM_PPI_GUID \
{0x2e1e7cae, 0x01fd, 0x4cf7, {0x8f, 0xbe, 0x8, 0xc4, 0x86, 0x82, 0x61, 0x89}}
extern EFI_GUID gOemPeiTestPeimPpiGuid;
实际上gOemPeiTestPeimPpiGuid的值在某个Package下的dec文件的[Ppis]块下定义,如下:
[Ppis]
gOemPeiTestPeimPpiGuid = {0x2e1e7cae, 0x01fd, 0x4cf7, {0x8f, 0xbe, 0x8, 0xc4, 0x86, 0x82, 0x61, 0x89}}
那C文件是怎么引用到这个值的呢?其实在这个Moudle的inf文件的[Packages]块下列出了上面的dec文件,并且也在[Ppis]块下列出了gOemPeiTestPeimPpiGuid这个名字(如果不列名字也会找不到这个Guid值)。
[Packages]
MdePkg/MdePkg.dec
OemPkg/OemPkg.dec
[Ppis]
gOemPeiTestPeimPpiGuid
说一下自己的看法,第二种方式可能会降低代码的耦合性,万一某一天需要更改这个Guid的值,我们只需要更改dec文件中的Guid就好了。(当然这个理由似乎不太成立,什么情况下需要更改Guid呢。。。)