我对 C# 很陌生(过去一周才开始学习)。
我有一个用 C 语言编写的自定义 DLL,它具有以下功能:
DLLIMPORT void test_function (double **test)
我要做的是从 C# 中为数组“测试”提供一个指针。
因此,如果在 DLL 函数中我有 test[0] = 450.60、test[1] = 512.99 等。我希望能够在我的 C# 程序中使用它。
在 C# 程序中,我有类似的东西:
namespace TestUtil
{
public class Echo
{
public double[] results = new double[10];
public double[] results_cpy = new double[10];
[DllImport("test_dll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern unsafe void test_function(ref double[] Result);
public unsafe void Tell()
{
results[0] = 0.0;
results[1] = 0.0;
results_cpy[0] = 0.0;
results_cpy[1] = 0.0;
test_function(ref results);
results_cpy[0] = (double)results[0] + (double)results[1] ;
}
}
}
在 DLL 的“test_function”函数中,我使用了以下内容:
*test[0] = 450.60;
*test[1] = 512.99;
在 DLL 中一切正常(我在 DLL 中使用了一个消息框来检查正在应用的值)。回到 C# 程序中,'results[0]' 似乎很好,我可以从中获取值,但 'results[1]' 给了我一个索引越界错误。我知道这一点,因为如果我省略 '+ (double)results[1]' 我不会收到错误。此外,如果我没有尝试在 DLL 中修改“test[1]”,它会保留 C# 的原始值(在我的示例中为 0.0)。
显然我没有做正确的事情,但这是我能够让它工作的最接近的事情。我尝试过的其他一切都失败了。
任何帮助将不胜感激。