3

私はいくつかのビデオ編集ソフトウェアに取り組んでおり、いくつかの Direct3D コンポーネントを使用してパフォーマンスを向上させる必要があります。具体的には、MFCreateDXSurfaceBuffer関数を使用して、direct3d サーフェスからサンプルを作成する必要があります。この関数を使用するコードを追加した後、コンパイルされた実行可能ファイルを実行しようとすると、次のメッセージが表示されます。

プロシージャ エントリ ポイント MFCreateDXSurfaceBuffer がダイナミック リンク ライブラリ MFPlat.dll に見つかりませんでした

出力ウィンドウ: プログラム '[0x1C04] ClassLibrary1.exe: Native' は、コード -1073741511 (0xc0000139) 'Entry Point Not Found' で終了しました。

問題を再現する最小限のプロジェクトを作成しました。

#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();
}

Properties->Linker->Input に「evr.lib;mfplat.lib;D3d9.lib」を追加しました

私は使っている:

  • Windows 7 64 ビット
  • MS ビジュアル スタジオ 2012
  • C++

私が試したこと:

  • Google - 同様の問題については言及されていません
  • 同僚のマシンでコードを実行しました。同じ問題が発生します。
  • evr.dll から他の関数​​を呼び出します。機能するものもあれば、同じ問題を抱えているものもあります
  • Dependency Walker: ミニ プロジェクト EXE MFPLAT.DLL、MSVCR110D.DLL、および KERNEL32.DLL に依存します。
  • エラーメッセージ:

    「暗黙的に依存するモジュールにエクスポート機能がないため、少なくとも 1 つのモジュールに未解決のインポートがあります。」

    明らかに、インポートされなかった関数は MFCreateDXSurfaceBuffer でした。お気付きかもしれませんが、MFCreateDXSurfaceBuffer は EVR.dll で定義されていますが、これは私の依存関係リストには明らかにありません。

    関数がインポートに失敗する理由とその修正方法を教えてください。

    4

    3 に答える 3

    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 に答える
    2

    プロシージャ エントリ ポイント MFCreateDXSurfaceBuffer がダイナミック リンク ライブラリ MFPlat.dll に見つかりませんでした

    MFCreateDXSurfaceBufferfunction is export offevr.dllではありませんmfplat.dll- あなたはすでにこれを発見しました。間違った/破損した Windows SDK バージョンを使用している可能性があります。少なくとも Windows SDK 7.0 では、コードがビルドされ、正常に起動します。上記のコード スニペットの他に、evr.lib追加のリンカー入力として追加するだけで済みます。

    于 2013-09-27T20:43:31.967 に答える