gpt4 book ai didi

c# - 从 C++ 获取 float 组到 C#

转载 作者:行者123 更新时间:2023-11-30 00:44:41 24 4
gpt4 key购买 nike

我在 C++ 函数中有 float 数组。

C++函数

void bleplugin_GetGolfResult(float* result)
{
float *array = new float[20];
for(int i=0; i < 20; i++)
array[i]= 25;
result = array;
//DEBUG PRINTING1
for(int i=0; i < 20; i++)
cout << result[i] << endl;//Here is correct
return;
}

C# 内部

[DllImport ("__Internal")]
private static unsafe extern void bleplugin_GetGolfResult (float* result);

public static unsafe float[] result = new float[20];

public unsafe static void GetGolfREsult(){
fixed (float* ptr_result = result) //or equivalently "... = &f2[0]" address of f2[0]
{
bleplugin_GetGolfResult( ptr_result );
//DEBUG PRINTING2
for(int i = 0; i < 20; i++)
Debug.Log("result data " + ptr_result[i]);
}
return;
}

我从另一个函数调用了 GetGolfREsult() 来获取结果。

//DEBUG PRINTING1 有正确的输出。

但是 //DEBUG PRINTING2 只产生了 0。

有什么问题吗?

最佳答案

正如 UnholySheep 和 nvoigt 所说,

result = array;

覆盖传递指针的地址,使您失去对调用函数的引用。

直接写入您的参数应该可以解决这个问题。

result[i] = 25;

此外,您实际上不必在 C# 中使用指针。您实际上可以执行以下操作:

像这样声明你的导入:

private static extern void bleplugin_GetGolfResult (float arr[]);

然后你可以这样调用它:

float arr = new float[20];
bleplugin_GetGolfResult(arr);

关于c# - 从 C++ 获取 float 组到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47676854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com