繁体   English   中英

在C#中调用C ++ dll函数时访问冲突

[英]Access Violation while calling a c++ dll function in C#

调用C ++ dll函数之一时,发生系统访问冲突错误。 (请参阅下面的代码-在步骤int calresult = ...即,中)数组值均已适当给出。 输入的哪一部分可能导致此错误?

谢谢 !

C ++代码xyz.dll:

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#代码:

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);
}

在C#中的结构内部使用实际的指针而不是数组,从而声明该类为unsafe

C#无法知道如何在struct内部封送数组,例如,数组的大小未定义。

感谢您的建议。

我必须围绕本机C ++ dll在C ++ / CLI中创建包装器。 然后,我从C#代码中调用了包装器中的函数。 这解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM