3

我正在开发一些视频编辑软件,需要使用一些 Direct3D 组件来提高性能。具体来说,我需要使用MFCreateDXSurfaceBuffer函数从 direct3d 表面创建样本。添加代码以使用此函数后,我在尝试运行已编译的可执行文件时收到以下消息:

无法在动态链接库 MFPlat.dll 中找到过程入口点 MFCreateDXSurfaceBuffer

输出窗口:程序“[0x1C04] ClassLibrary1.exe: Native”已退出,代码为 -1073741511 (0xc0000139)“未找到入口点”。

我创建了一个重现问题的简约项目:

#include < mfapi.h >
#include < d3d9.h >
#include < evr.h >

static void
Fail
    (
    )
{
    IDirect3DSurface9* theSurface = nullptr;
    IMFMediaBuffer* theBuffer = nullptr;
    MFCreateDXSurfaceBuffer(__uuidof(IDirect3DSurface9), theSurface, FALSE, &theBuffer);
}

int main()
{
    Fail();
}

我将“evr.lib;mfplat.lib;D3d9.lib”添加到属性->链接器->输入附加依赖项

我在用:

  • 视窗 7 64 位
  • 微软视觉工作室 2012
  • C++

我试过的:

  • 谷歌 - 没有提到类似的问题
  • 在同事的机器上运行代码。出现同样的问题。
  • 从 evr.dll 调用其他函数。有些工作,有些有同样的问题
  • Dependency Walker:迷你项目 EXE 依赖于 MFPLAT.DLL、MSVCR110D.DLL 和 KERNEL32.DLL。
  • 错误信息:

    “由于隐式依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。”

    显然,没有导入的函数是MFCreateDXSurfaceBuffer。您可能已经注意到 MFCreateDXSurfaceBuffer 定义为 EVR.dll,我的依赖项列表中明显没有它。

    为什么函数无法导入,我该如何解决?

    4

    3 回答 3

    2

    无法在动态链接库 MFPlat.dll 中找到过程入口点 MFCreateDXSurfaceBuffer

    MFCreateDXSurfaceBuffer函数是导出的evr.dll,而不是mfplat.dll- 你已经发现了这一点。我想您可能使用了一些错误/损坏的 Windows SDK 版本。至少在 Windows SDK 7.0 中,代码构建和启动都很好。除了上面引用的代码片段之外,您只需添加evr.lib作为附加链接器输入。

    于 2013-09-27T20:43:31.967 回答
    2

    我也面临这个问题。作为记录,我正在写我在这里找到的解决方案:

    HMODULE evrModule = LoadLibraryA("evr.dll");
    
    /* MFCreateDXSurfaceBuffer prototype */
    typedef HRESULT(STDAPICALLTYPE *MFCDXSB)(_In_ REFIID iid, _In_ IUnknown *unkSurface, _In_ BOOL bottomUpWhenLinera, _Out_ IMFMediaBuffer **mediaBuffer);
    
    MFCDXSB pMFCreateDXSurfaceBuffer = (MFCDXSB)GetProcAddress(evrModule, "MFCreateDXSurfaceBuffer");
    

    不要忘记检查错误并在最后调用 FreeLibrary(evrModule)

    我尝试了几件事,但都失败了。我知道这有点硬核,但至少它有效,我只为这种方法这样做,所以我想没关系。

    于 2016-02-16T09:01:57.917 回答
    0

    遇到这个问题后,我搜索了Windows SDK目录下的库文件,找到了一个导出MFCreateDXSurfaceBuffer函数的.lib文件。该文件称为 evr_vista.lib。

    我不知道为什么 EVR 函数被拆分为 evr.lib 和 evr_vista.lib。

    除了“evr.lib”之外,将“evr_vista.lib”添加到要链接的库列表中应该可以解决任何链接错误。

    在 Visual Studio 下:

    项目属性 > 配置属性 > 链接器 > 输入 > 附加依赖项

    于 2017-04-22T10:34:36.487 回答