gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:46:47 25 4
gpt4 key购买 nike

基本上,我正在尝试使用他们网页中预构建的 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把我弄糊涂了。

关于c++ - 动态调用 Openh264 函数导致我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com