C#调用PortAudio.dll方法Pa_Initialize()失败,返回错误paUnanticipatedHostError
最近写的一个项目中,遇到一个奇葩的问题,C#调用C++库PortAudio.dll(因为使用到了PortAudio对音频数据进行处理),网上下载的demo可以常使用,莫得任何问题,BUT,当我集成到我的系统之后,调用PortAudio的初始化方法Pa_Initialize()总是不成功,郁闷了,和demo的代码完全一致,点搞啊?
折腾了我老半天,最后怀疑是反射的问题,没错,反射应该背这个锅,原因在于我的模块是通过反射加载到系统中的,而我调用PortAudio.dll的代码写在模块中,通过反射加载的模块再调用PortAudio的接口就会失败。于是我把调用PortAudio的部分单独写在另一个dll中(这个dll不需要反射加载),然后我需要反射的模块通过引用dll实现调用,这样就完全没问题。
记住:反射可能会导致一些莫名其妙的问题,尤其是在于C++交互的时候。