刘可可丶 2022-08-23 00:14 采纳率: 50%
浏览 244
已结题

C++重新封装C++dll后使用C#调用报错“尝试读取或写入受保护的内存,这通常指示其他内存已损坏”。

用C++重新封装了一下C++的dll,用C#调用报错“尝试读取或写入受保护的内存,这通常指示其他内存已损坏”。需要注意的是原来的dll直接调用是不会报这个错误的,只是因为返回的是string类型需要转为char*所以用C#重新封装了。因为买的设备的工程师在婚假,所以只能自己重新封装dll,但是一直报错。大概知道应该是调用原来的dll中返回string时候的指针出了问题,但是不知道怎么修改,希望各位不吝赐教!
问题相关代码
原C++dll接口:

img

我封装的接口以及实现代码:

img

img

C#的调用代码:

img


img

报错情况:

img

已经尝试过网上说的改变数据类型的方法,不奏效。
如何才能不报错
  • 写回答

5条回答 默认 最新

  • 真相重于对错 2022-08-23 08:51
    关注
    获得14.00元问题酬金

    你传入了一个空的字符串,并且在dll内部也没有初始化,然后访问它肯定出错,我记不清楚stringbuilder传入dll后,在dll内部初始化有没有效。你可以测试一下。
    两种方式,在c#端开辟一段内存,传入,或者在dll内部开辟

    评论

报告相同问题?

问题事件

  • 系统已结题 8月31日
  • 赞助了问题酬金40元 8月23日
  • 赞助了问题酬金10元 8月23日
  • 创建了问题 8月23日

悬赏问题

  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography