C# から Direct3D インターフェイスを手動で呼び出そうとした人はいますか? 私は次の短いコードを書き、result == S_OK
呼び出した後に取得しましたD3D11CreateDevice()
。
を呼び出したときの引数の 1 つであるGetCreationFlags()
戻り値を期待していますが、取得しています。ここで何が欠けていますか?32
D3D11CreateDevice()
AccessViolationException
前もって感謝します。
[Guid("DB6F6DDB-AC77-4E88-8253-819DF9BBF140")]
interface ID3D11Device
{
[return : MarshalAs(UnmanagedType.U4)]
uint GetCreationFlags();
}
[DllImport("d3d11.dll", CallingConvention = CallingConvention.StdCall)]
private unsafe static extern int D3D11CreateDevice(
void* arg0, int arg1, void* arg2, int arg3, void* arg4, int arg5, int arg6,
[Out, MarshalAs(UnmanagedType.Interface)] out object arg7,
void* arg8, void* arg9);
public static void CreateDevice()
{
object deviceOut;
int arg8;
IntPtr arg9;
unsafe
{
int result = D3D11CreateDevice(
(void*)IntPtr.Zero, 1, (void*)IntPtr.Zero, 32,
(void*)IntPtr.Zero, 0, 7,
out deviceOut,
&arg8,
&arg9);
}
ID3D11Device dev = (ID3D11Device)deviceOut;
uint i = dev.GetCreationFlags(); // System.AccessViolationException
}
参考までに、 と のプロトタイプは次のようにD3D11CreateDevice
なりID3D11Device::GetCreationFlags()
ます。
HRESULT D3D11CreateDevice(
_In_ IDXGIAdapter *pAdapter,
_In_ D3D_DRIVER_TYPE DriverType,
_In_ HMODULE Software,
_In_ UINT Flags,
_In_ const D3D_FEATURE_LEVEL *pFeatureLevels,
_In_ UINT FeatureLevels,
_In_ UINT SDKVersion,
_Out_ ID3D11Device **ppDevice,
_Out_ D3D_FEATURE_LEVEL *pFeatureLevel,
_Out_ ID3D11DeviceContext **ppImmediateContext
);
UINT GetCreationFlags();