4

誰かがこれで私を助けてくれることを願っています。私は主に C# 開発者なので、C と C++ のスキルは低いです。私は、より大きなアプリケーションのプラグインであるネイティブ C dll を持っています。gccを使用して、Linux上のWindows用にこのdllをクロスコンパイルします。

D3DSurface を作成するときにネイティブ dll で、混合モード C++ dll で関数を呼び出し、Hwnd/ハンドルと共にサーフェスへのポインターを渡したいと考えています。その混合モード C++ は、私の C# マネージ コードを呼び出す必要があります。

例として、CI で次のことを行いたいとします。

Hwnd handle;
LPDIRECT3DSURFACE d3dtarg;
SurfaceCreated(handle, d3dtarg);

C# では、これを混合モード アセンブリから呼び出したい

public static class D3DInterop
{
    public static void SurfaceCreated(IntPtr handle, IntPtr surface)
    {
        //do work
    }
}

私は C++ が苦手なので、混合モード dll のコーディングに必要なものの例を誰かが教えてくれるかどうか知りたいだけです。また、混合モードのdllをdirectxヘッダーでコンパイルする必要がないようにしたいので、「C」LPDIRECT3DSURFACEを汎用ポインターにキャストする方法はありますか? C# では、とにかく IntPtr を使用します。

4

3 に答える 3

3

C から呼び出すことができ、他の .Net アセンブリ (つまり、C# のもの) も参照できるマネージ C++ (C++/CLI) DLL プロジェクトを作成します。次に、C++/CLI ブリッジで行う必要があるのは、データ型を HWND から IntPtr などに変換することだけです。

于 2008-11-07T07:31:49.327 に答える
2

Microsoft XNAを調べましたか?おそらくDirectXのラッパーを管理しています。

于 2008-11-06T01:01:43.560 に答える
0

void *混合モードDLLで使用できます。ポインタから何か(へのポインタを含むIDirect3DSurface)からへの暗黙のキャストがありますvoid *。次に、そのポインタをにキャストできますIntPtr

于 2008-11-06T14:16:28.840 に答える