动态调用 Openh264 函数导致我的应用程序崩溃

Dynamically calling Openh264 functions causes my app to crash

基本上我正在尝试使用他们网页上预构建的 Openh264 DLL。

在我调用所需的 WelsCreateEncoder() 之前,可以使用 LoadLibrary 和 GetProcaddress。

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               |
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 让我感到困惑。