MS VC运行时是否会发生意外冲突?

时间:2016-05-25 06:39:37

标签: c# dll ffmpeg marshalling msvcrt

我已经学到了很难的方法,在每个依赖于不同MS VC运行时的两个dll之间共享堆指针并不是很好。很公平。基于这种经验以及正在调试的程序链的当前奇怪行为,我想问一个

问题:

使用不同的运行时(例如lib1.dllmsvcrt.dll使用一个运行时(例如lib2.dll可能会损坏vcruntime140d.dll的堆吗?没有指针共享,只是在同一个运行时只有malloc / free对。

背景:(对于那些要求它的人)

  • standard zeranoe ffmpeg libraries取决于msvcrt.dll
  • 我根据这些ffmpeg库创建了小的C dll,涵盖了所需的功能,我们称之为libvideo.dll。它取决于VS2015运行时。
  • 我为libvideosharp.dll(编组)创建了libvideo.dll托管C#包装器库(也是VS2015)。
  • 我使用libvideosharp.dll(也是VS2015)创建了C#测试应用。
  • 调试C#测试应用程序(以及链中的相关库)我遇到以下情况:
    1. libvideo.dll mallocs并且内置数据结构。
    2. libvideo.dll调用一些ffmpeg初始化例程(av_register_allavformat_network_init),这些例程可能在其自己的运行时上进行malloc。
    3. libvideo.dll的数据结构已损坏(甚至没有以任何方式传递给ffmpeg libs,只是独立的malloced块)。

0 个答案:

没有答案