将编写在c++ DLL中的c++方法中的数据返回到c#中

Returning data from C++ method written in the C++ DLL into C#

本文关键字:c++ 数据 返回 中的 DLL 方法      更新时间:2023-10-16

我可以返回一个数字,例如double,从c++ DLL中编写的c++方法返回到c#

c++一边

__declspec(dllexport) double GetData()
{
    double data = 5;
    return data;
}

c#的一面

[DllImport("data_acquisition_sys.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern double GetData();
double data = GetData();

但是如果我想像上面那样返回一个双精度数组double*或double[],只需改变返回值

__declspec(dllexport) double* GetData()  //C++
public static extern double[] GetData(); //C#

我得到以下错误

未处理异常:System.Runtime.InteropServices.MarshalDirectiveException: Cannot marshal 'return value': Invalid managed/unmanaged type combination.

您可以在这里找到一个如何从本机环境到托管环境p/调用数组的示例:

  • http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute.sizeparamindex.aspx

阅读更多关于数组传递的内容:

  • http://msdn.microsoft.com/en-us/library/z6cfh6e6.aspx cpcondefaultmarshalingforarraysanchor2