基本上,我尝试从他们的网页中使用预先构建的Openh264 DLL。
使用LoadLibrary和GetProcaddress可以工作,直到我调用所需的WelsCreateEncoder()。
VS错误告诉我没有正确保存ESP。
在调试器中,我可以继续运行,一切工作正常。我已经调试得很好了,我已经把一切都准备好了。但作为一个独立的应用程序,它就会崩溃。
我假设因为它是一个C库,而我的应用程序是c++,所以我的调用约定是错误的?
https://github.com/cisco/openh264
我为WelsCreateDecoder的开头和结尾添加了ASM。是我还是看起来像是忘记了sub 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 |发布于 2019-06-14 02:49:37
typedef int(* _pWelsCreateSVCEncoder)(ISVCEncoder** ppEncoder);
typedef void(* _pWelsDestroySVCEncoder)(ISVCEncoder* ppEncoder);事实证明,这是缺乏调用约定。不需要WINAPI。
https://stackoverflow.com/questions/56576262
复制相似问题