我是C++的絕對零。但我需要編寫一個用於管理d3ddevice的小型C++類。 我C#代碼是:ComPtr <ID3D11Device>到IntPtr
public class HCPPUtils
{
[DllImport("HSpectrum\\Assets\\HCPPUtils.dll")]
private static extern int Getd3Device(ICanvasResourceCreator resourceCreator);}
HCPPUtils hcp = new HCPPUtils();
var pnt = hcp.HGetOrCreate(ResourceCreator);
var d3dDevice = SharpDX.Direct3D11.Device.FromPointer<SharpDX.Direct3D11.Device>(new System.IntPtr(pnt));
我C++代碼是:
extern "C"
{
__declspec(dllexport) int Getd3Device
(Microsoft::Graphics::Canvas::ICanvasResourceCreator^ canvasDevice)
{
ComPtr<ID3D11Device> m_device;
__abi_ThrowIfFailed(Windows::Graphics::DirectX::Direct3D11::GetDXGIInterface(canvasDevice->Device,m_device.GetAddressOf()));
return m_device???
}
}
如何從C++代碼返回一個IntPtr的;所以,我如何從ComPtr獲得IntPtr < ID3D11Device>?
[編輯]
我在做什麼是... 我在我的C#項目win2d canvasandimatedcontrol。我想使用sharpdx在其中繪製direct3d對象。但我發現我需要從win2d畫布獲得d3ddevice對象。並沒有一個C#方法來獲取它。 所以我能想象的唯一解決方案是構建一個簡單的C++項目,我可以通過canvas控件並獲取d3ddevice。唯一的問題是如何將d3d設備傳遞迴c#。夏普DX似乎只有一個方法Device.FormIntPtr來創建它。但我無法將intptr傳回給c#對象。
我試圖實現Rook寫的內容,但我無法理解它對我的場景如何有用。我的意思是它可能是有用的,但我仍然需要從C++項目中傳遞IDirect3DDevice對象。
如果我的答案不充分,你可以這樣說,它可能會改變。如果有幫助,您應該考慮將其標記爲已接受。 – Rook
對不起,以前沒有重放,但我仍然在尋找一種方法去做我的意思。你的回答並不充分。這是有益的閱讀更多關於論點... – puckkk
@Rook在原帖中增加了信息:) – puckkk