一个会飞的的蓝胖子 2022-05-13 09:00 采纳率: 0%
浏览 585

C#调用C++封装的dll,报错System.AccessViolationException:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”,这个怎么解决?

本人尝试封装paddleocr,给C#直接调用,但是每次到调封装的C++方法时就会报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。” ,始终难以解决,下面时我的C#代码:
[DllImport("ocr_system.dll", EntryPoint = "LoadModel", SetLastError = true, CharSet = CharSet.Ansi)]
static extern IntPtr LoadModel(ref byte[] input, int height, int width); //out IntPtr seg_res
private void button1_Click(object sender, EventArgs e)
{
string image_path = "C:/Users/soft016/Desktop/Test/t1.jpg";
Bitmap bmp = new Bitmap(image_path);
int stride;
byte[] source = GetBGRValues(bmp, out stride);
IntPtr seg_img = LoadModel(ref source, bmp.Width, bmp.Height);
Mat img = new Mat(seg_img);
Bitmap seg_show = new Bitmap(img.Cols, img.Rows, (int)img.Step(), System.Drawing.Imaging.PixelFormat.Format24bppRgb, img.Data);
pictureBox1.Image = seg_show;
}

下面时C++里面的方法:
extern "C" __declspec(dllexport) cv::Mat * LoadModel(char* input, int width, int height);
__declspec(dllexport) cv::Mat* LoadModel(char* input, int width, int height)
{
C++代码
}

执行到C#代码的 IntPtr seg_img = LoadModel(ref source, bmp.Width, bmp.Height); 就会报错提示 ,求解答

  • 写回答

3条回答 默认 最新

  • 弥散的思绪 2022-05-13 09:07
    关注

    只是这些,是看不出来的。C++报内存错误,有很多原因导致的。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月13日

悬赏问题

  • ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)
  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧