C#調(diào)用PortAudio.dll方法Pa_Initialize()失敗蝇狼,返回錯(cuò)誤paUnanticipatedHostError
最近寫(xiě)的一個(gè)項(xiàng)目中,遇到一個(gè)奇葩的問(wèn)題,C#調(diào)用C++庫(kù)PortAudio.dll(因?yàn)槭褂玫搅薖ortAudio對(duì)音頻數(shù)據(jù)進(jìn)行處理)街立,網(wǎng)上下載的demo可以常使用,莫得任何問(wèn)題芥炭,BUT蛹稍,當(dāng)我集成到我的系統(tǒng)之后铺纽,調(diào)用PortAudio的初始化方法Pa_Initialize()總是不成功,郁悶了枚钓,和demo的代碼完全一致隶垮,點(diǎn)搞啊秘噪?
折騰了我老半天狸吞,最后懷疑是反射的問(wèn)題,沒(méi)錯(cuò)指煎,反射應(yīng)該背這個(gè)鍋蹋偏,原因在于我的模塊是通過(guò)反射加載到系統(tǒng)中的,而我調(diào)用PortAudio.dll的代碼寫(xiě)在模塊中至壤,通過(guò)反射加載的模塊再調(diào)用PortAudio的接口就會(huì)失敗威始。于是我把調(diào)用PortAudio的部分單獨(dú)寫(xiě)在另一個(gè)dll中(這個(gè)dll不需要反射加載),然后我需要反射的模塊通過(guò)引用dll實(shí)現(xiàn)調(diào)用像街,這樣就完全沒(méi)問(wèn)題黎棠。
記捉臁:反射可能會(huì)導(dǎo)致一些莫名其妙的問(wèn)題,尤其是在于C++交互的時(shí)候脓斩。