基本上,我试图从其网页使用预构建的Openh264 DLL。
在直到调用所需的WelsCreateEncoder()之前,都可以使用LoadLibrary和GetProcaddress。
VS错误告诉我ESP未正确保存。
在调试器中,我可以继续运行,一切正常。
我一直在调试,一切正常。但作为独立应用程序,它只会崩溃。
我假设是因为它是一个C库,而我的应用程序是c++,所以我的调用约定是错误的?
https://github.com/cisco/openh264
我为WelsCreateDecoder的开头和结尾添加了ASM。是我还是看起来忘记了esp,4?
typedef int(WINAPI * _pWelsCreateSVCEncoder)(ISVCEncoder** ppEncoder);
typedef void(WINAPI * _pWelsDestroySVCEncoder)(ISVCEncoder* ppEncoder);
0F3B8BF0 | 55 | push ebp |
0F3B8BF1 | 8BEC | mov ebp,esp |
...
0F3B8C0F | 33C0 | xor eax,eax |
0F3B8C11 | 85C9 | test ecx,ecx |
0F3B8C13 | 0F94C0 | sete al |
0F3B8C16 | 5D | pop ebp |
0F3B8C17 | C3 | ret |
最佳答案
typedef int(* _pWelsCreateSVCEncoder)(ISVCEncoder** ppEncoder);
typedef void(* _pWelsDestroySVCEncoder)(ISVCEncoder* ppEncoder);
事实证明这是缺乏通话惯例的。不需要WINAPI。
尽管这行https://github.com/cisco/openh264/blob/8533dd9daaaf3d7a51d9295686c31718ec3c946e/codec/decoder/plus/src/welsDecoderExt.cpp#L1052使我感到困惑。
关于c++ - 动态调用Openh264函数会导致我的应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56576262/