【问题标题】:How to pass a C# double[] to a C++ function that requires constant double* pArr? C++, C#如何将 C# double[] 传递给需要常量 double* pArr 的 C++ 函数? C++, C#
【发布时间】:2011-07-20 19:01:52
【问题描述】:

我有一个用 C++ 编写的函数:

MyFunc(const double* pArray, int length);

我需要传入一个非常量数组:

//C#
double[] myDoubleArray = new double[] { 1, 2, 3, 4, 5 };

MyFunc(myDoubleArray, 5);

当我这样做时程序正在中断。

编辑:

//C# declaration

[DllImport(@"RTATMATHLIB.dll", EntryPoint = "?MyFunc@@YANPBNHHHH@Z")]
public static extern double MyFunc(double[] data, int length);

//C# usage
public static double MyFunc(double[] data)
{
    return MyFunc(data, data.Length);
}

//C++ export
__declspec(dllexport) double MyFunc(const double* data, int length);


//C++ signature
double MyFunc(const double* data, int length)
{
    return 0; //does not quite matter what it returns...
}

【问题讨论】:

  • 你能告诉我们你在 C# 中对 MyFunc 的声明吗?另外,“程序正在中断”是什么意思?您是否收到编译器错误/运行时错误/意外结果?
  • 你能发布 Import 属性和 MyFunc 签名吗?
  • 还将extern "C" 添加到您的导出行中以在不修改名称的情况下将其导出,以便您可以通过其实际名称引用它。

标签: c# c++ constants marshalling


【解决方案1】:

您始终可以将非常量数组传递给需要常量数组的函数。数组的 const 限定符意味着该函数不会修改数组的内容。数组在传递给函数之前不需要是常量;由于声明中的 const,该函数不会修改内容

【讨论】:

    【解决方案2】:

    可以很容易地添加常量。你的程序没有错。您一定漏掉了一些其他细节。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      相关资源
      最近更新 更多