我正在處理一個UWP項目。我想從C#發送一組位置數據(目前我只是將一個浮點數組作爲一個測試)從C到C++(爲了在DirectX中生成一個生成的網格在XAML的基礎上)。發送UWP應用程序中的數組從C#到C++/Cx dll
我試過這個:Improper marshaling: C# array to a C++ unmanaged array(接受的答案)。但它不起作用,我猜我錯過了一些東西,但我不知道是什麼。當我嘗試他的建議時,我的編譯器抱怨C++中聲明的CInput結構,因爲它是本地的,所以它不能成爲公共函數中的參數。 (即從C#調用的函數)
(我會評論這個問題,但我沒有這種特權呢。)
這是我的代碼:
在C#:
public struct CInput
{
public IntPtr array;
}
public VideoView()
{
InitializeComponent();
Loaded += OnLoaded;
float[] test = new float[4];
CInput input = new CInput();
input.array = Marshal.AllocHGlobal(Marshal.SizeOf<float>() * test.Length);
Marshal.Copy(test, 0, input.array, test.Length);
D3DPanel.CreateMesh(out input, test.Length);
Marshal.FreeHGlobal(input.array);
}
用C++
(在D3DPanel.h):
struct CInput
{
float* array;
};
[Windows::Foundation::Metadata::WebHostHidden]
public ref class D3DPanel sealed : public Track3DComponent::DirectXPanelBase
{
public:
D3DPanel();
void CreateMesh(CInput points, int length);
}
誰能告訴我,我做錯了什麼?
編輯:
我試圖PassArray圖案,如所描述here,但它給這個錯誤: 「錯誤C4400 'const int的':常量/不支持這種類型的易失性限定符」
void CreateMesh(const Array<float>^ points, int length);
用「Array」替換「const Array ^」會給出「語法錯誤:標識符'Array'」。
我正在使用一個結構,因爲我只是想要做什麼被寫入接受的答案。我不知道我確切地理解你在說什麼(實際上,我相信我不知道)。我會查找你正在談論的類型,看看我能否更好地理解它,並回過頭來提出新的問題。 – Stef
因此,要使用IVector,我需要製作一個新的從IVector繼承的ref類,並使用它代替C++/CX部分中的CIput結構。那是對的嗎?所以我需要實現在IVector中定義的所有函數? – Stef
當我嘗試使用Platform :: Array時,編譯器會抱怨它。 (錯誤C2061 \t語法錯誤:identifier'Array') – Stef