首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PInvoke -方法的类型签名与PInvoke不兼容

PInvoke -方法的类型签名与PInvoke不兼容
EN

Stack Overflow用户
提问于 2013-02-23 16:43:53
回答 1查看 1.4K关注 0票数 0

这是我尝试在C#中使用的头文件签名和C代码:

代码语言:javascript
复制
__declspec(dllexport) emxArray_real_T *emxCreateWrapper_real_T(real_T *data, int32_T rows, int32_T cols);

struct emxArray_real_T
{
    real_T *data;
    int32_T *size;
    int32_T allocatedSize;
    int32_T numDimensions;
    boolean_T canFreeData;
};

emxArray_real_T *emxCreateWrapper_real_T(real_T *data, int32_T rows, int32_T
  cols)
{
  emxArray_real_T *emx;
  int32_T size[2];
  int32_T numEl;
  int32_T i;
  size[0] = rows;
  size[1] = cols;
  emxInit_real_T(&emx, 2);
  numEl = 1;
  for (i = 0; i < 2; i++) {
    numEl *= size[i];
    emx->size[i] = size[i];
  }

  emx->data = data;
  emx->numDimensions = 2;
  emx->allocatedSize = numEl;
  emx->canFreeData = FALSE;
  return emx;
}

我目前正尝试在C#中调用它,如下所示:

代码语言:javascript
复制
[DllImport(@"C:\bla\bla.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern emxArray_real_T emxCreateWrapper_real_T(double[,] data, int rows, int cols);

double[,] array2D = new double[,] { { 1 }, { 3 }, { 5 }, { 7 } };
var x = emxCreateWrapper_real_T(array2D, 1, 4);

但是get:

代码语言:javascript
复制
Method's type signature is not PInvoke compatible.

emxArray_real_T目前看起来像这样:

代码语言:javascript
复制
[StructLayout(LayoutKind.Sequential)]
public struct emxArray_real_T
{
    //public IntPtr data;
    //public IntPtr size;
    double[] data;
    int[] size;
    public int allocatedSize;
    public int numDimensions;
    [MarshalAs(UnmanagedType.U1)]
    public bool canFreeData;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-23 17:08:45

有多个问题。首先,您的C++函数返回一个指针(emxArray_real_T *),但是您的导入声明返回一个结构。这是行不通的。此外,在导入声明中将数据声明为double,但在结构中将其声明为double[]。建议:

  • 用class
  • Determine替换结构如果数据应该是浮点型或双精度型,
  • 还会检查real_T的最终大小。我认为这是一个平台相关变量,可以是浮点型(32位)或双精度型(64位)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15038735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档