我从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的访问存在问题。
由于