首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态调用Openh264函数会导致应用程序崩溃

动态调用Openh264函数会导致应用程序崩溃
EN

Stack Overflow用户
提问于 2019-06-13 16:20:01
回答 1查看 57关注 0票数 1

基本上,我尝试从他们的网页中使用预先构建的Openh264 DLL。

使用LoadLibrary和GetProcaddress可以工作,直到我调用所需的WelsCreateEncoder()。

VS错误告诉我没有正确保存ESP。

在调试器中,我可以继续运行,一切工作正常。我已经调试得很好了,我已经把一切都准备好了。但作为一个独立的应用程序,它就会崩溃。

我假设因为它是一个C库,而我的应用程序是c++,所以我的调用约定是错误的?

https://github.com/cisco/openh264

我为WelsCreateDecoder的开头和结尾添加了ASM。是我还是看起来像是忘记了sub esp,4?

代码语言:javascript
复制
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               |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 02:49:37

代码语言:javascript
复制
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把我搞糊涂了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56576262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档