使用CLI将浮点值从C#传递到C dll时发生AccessViolationException错误

时间:2015-03-06 09:35:07

标签: c# c++ .net c dll

我从C#应用程序中调用C dll中的函数。错误是AccessViolationException。我的C dll是:

cinterface.h

#ifdef ACQ_EXPORTS
#define ACQ_API __declspec(dllexport)
#else
#define ACQ_API __declspec(dllimport)
#endif

#ifdef __cplusplus extern "C" {
    #endif
    ACQ_API int set_integration_time(float int_time);
    #ifdef __cplusplus
}
#endif

然后我的CLI类是:

#include "cinterface.h"       
public ref class Class1 {
    private:            
        float int_time;
        float wait_time;
    public:
        Class1(){}
        ~Class1(){}

        int Class1::set_integratintime(double int_t) {
            int_time = (float)int_t;
            set_integration_time(int_time); 
            return PASS;
        }
};

该CLI类从dll包装C函数。此CLI实现为dll,并且Class1 CLI dll移植到我的C#应用​​程序项目中。我的C#应用​​程序如下

然后是我的C#应用​​程序:

public partial class Form1 : Form {
    public Form1() {
        Class1 cameraInt = new Class1();
    }

    private void wait_time_MouseUp(object sender, MouseEventArgs e) {
        int ret = cameraInt.set_integratintime(100);
    }
}

当我调试时,我在行上的CLI类中遇到错误;

set_integration_time(int_time);

错误是:

  

AccessViolationException未处理
  尝试读取或写入受保护的内存。这通常是一个迹象    其他记忆已经腐败。

界面有什么问题?

修改
当我从C应用程序接口C dll函数int set_integration_time(float int_time);时,它可以工作。这意味着dll中的C函数很好。只是来自CLI的访问存在问题。

由于

0 个答案:

没有答案