Je suis un zéro absolu en C++. Mais j'ai besoin d'écrire une petite classe C++ pour gérer un d3ddevice. Mon C# Code est: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));
Mon C++ Code est:
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???
}
}
Comment puis-je retourner un IntPtr à partir du code C++; alors, comment puis-je obtenir IntPtr de ComPtr < ID3D11Device>?
[édité]
Ce que je fais est ... J'ai un canvasandimatedcontrol win2d dans mon C# projet. Je veux y dessiner un objet direct3d en utilisant sharpdx. Mais j'ai découvert que j'avais besoin de l'objet d3ddevice de win2d canvas. Et il n'y a pas de méthode C# pour l'obtenir. Donc la seule solution que je puisse imaginer est de construire un simple projet C++ auquel je peux passer le contrôle de canvas et obtenir le d3ddevice. Le seul problème est de savoir comment renvoyer le périphérique d3d à C#. Sharp DX semble avoir juste une méthode Device.FormIntPtr pour le créer. Mais je ne suis pas capable de renvoyer l'intptr à l'objet C#.
J'ai essayé de mettre en œuvre ce que Rook a écrit, mais je ne comprends pas comment cela pourrait être utile pour mon scénario. Je veux dire que ça pourrait être utile, mais je dois quand même passer l'objet IDirect3DDevice d'un projet C++.
Si ma réponse était inadéquate, vous pourriez le dire et cela pourrait être modifié. Si cela vous a été utile, vous devriez envisager de le marquer comme accepté. – Rook
Désolé de ne pas avoir rejoué plus tôt, mais je cherche toujours un moyen de faire ce que je voulais dire. Votre réponse n'était pas inadéquate. Il était utile de lire un peu plus sur l'argument ... – puckkk
@Rook Ajout d'informations dans l'article original :) – puckkk