首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中调用c++ dll函数时发生访问冲突

在C#中调用c++ dll函数时发生访问冲突
EN

Stack Overflow用户
提问于 2018-01-02 07:59:52
回答 2查看 407关注 0票数 1

调用某个C++ dll函数时发生系统访问冲突错误。(参考下面的代码-在步骤int calresult =...即,)所有数组值都适当地给出了。输入的哪个部分可能会导致此错误?

谢谢!

C++代码-xyz.dll:

代码语言:javascript
复制
typedef struct model_parameters_t
{
    uint16_t *Input4;
    uint16_t *Input5;
} ;

typedef struct calibration_set_s
{
    uint16_t *input1;
    uint16_t *input2;
    uint16_t input3;
    model_parameters_t model;
} calibration_t;



extern "C"
{
    uint16_t compute(calibration_t);
}

C#代码:

代码语言:javascript
复制
public struct model_parameters_t
{
    uint16_t [] Input4;
    uint16_t [] Input5;
} ;

public struct calibration_set_s
{
    uint16_t []input1;
    uint16_t []input2;
    uint16_t input3;
    model_parameters_t model;
} calibration_t;


[DllImport(@"xyz.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int compute(calibration_set_s calibration_set_t);



public class trycompute
{
    calibration_set_s calibration_set_Cal_input = new calibration_set_s();
    calibration_set_Cal_input.input1= array;
    calibration_set_Cal_input.input2= array;
    calibration_set_Cal_input.input3= 12;
    calibration_set_Cal_input.model.input4 = array;
    calibration_set_Cal_input.model.input5 = array;

    int CalResult = computeHybridCalCoeffs(calibration_set_Cal_input);
}
EN

回答 2

Stack Overflow用户

发布于 2018-01-02 18:07:16

在声明类unsafe时,在C#的结构中使用实际的指针而不是数组。

C#没有办法知道如何封送结构中的数组,例如,数组的大小是未定义的。

票数 0
EN

Stack Overflow用户

发布于 2018-01-08 15:16:55

谢谢你的建议。

我不得不用C++ /CLI语言为我的本机C++动态链接库创建一个包装器。然后,我从C#代码中调用了包装器中的函数。这就解决了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48054251

复制
相关文章

相似问题

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