相比于C語言中函數可以直接調用,CPP的函數由于命名存在隱式添加,因此需要通過一套流程才能調用:
1. 編碼中,使用extern "C" 定義一個C函數,返回獲取對象的指針;執行該函數時,獲得一個地址,例如0x496a9784,為該對象指針。
? ? example:?extern "C" CxxxxFpgaDrv *GetxxxxICDrv(void)
2. 找到函數所在的cpp文件,它會編譯成同名的.o文件;將nm xxx.o > xxx.s, 獲取文件各函數的符號表。
? ? example:
_ZN14COxxxxFpgaDrv10InitializeEv
_ZN14CxxxxFpgaDrv21ResetIngGatherScatterEv
_ZN14CxxxxFpgaDrv14ResetIngBufMgrEv
_ZN14CxxxxFpgaDrv14ResetPPIngPathEv
_ZN14CxxxxFpgaDrv20ResetEgGatherScatterEv
_ZN14CxxxxFpgaDrv13ResetPPEgPathEv
_ZN14CxxxxFpgaDrv13ResetEgBufMgrEv
?
3. 使用?_ZN14COxxxxFpgaDrv10InitializeEv(0x496a9784)的方式來調用,即執行了該對象下的Initialize()函數。