将UWP应用程序中的数组从c#发送到c++ /Cx dll
本文关键字:c++ dll Cx 应用程序 UWP 数组 | 更新日期: 2023-09-27 18:09:25
我正在做一个UWP项目。我想发送一个数组的位置数据(目前我只是发送一个浮点数组作为测试)从c#到c++(为了渲染在XAML的东西之上的DirectX生成的网格)。
我尝试了这个:不正确的封送:c#数组到c++非托管数组(可接受的答案)。但不管用,我猜我漏掉了什么,但我不知道是什么。当我尝试他的建议时,我的编译器抱怨在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);
}
in c++ (in 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模式,如这里所述,但它给出了这个错误:"错误C4400 'const int':不支持此类型的const/volatile限定符"
void CreateMesh(const Array<float>^ points, int length);
将"const Array^"替换为"Array"会导致"语法错误:标识符'Array'"
你需要稍微修改一下你的代码,正如IntelliSense建议的那样,使用
Platform::WriteOnlyArray<float>^
当它是"out"类型时,
const Platform::Array<float>^
当它是"in"类型时。因为c++/CX不支持"in/out"类型。
我建议你在c++/CX中做内存分配,所以在你的c#代码中,你可以直接传递一个数组,而不用担心封送。