.net6中 Marshal.Copy()函数的问题

ping_chang_xin 2023-05-15 14:39:46

1、 .net6使用Marshal.Copy()函数将c++dll返回的float指针,转换成c#的float数组,第一次执行得到的数据都是一些乱七八糟的数值,然后再重复执行,就不会有问题,这是什么原因呢,怎么解决? 

2、同样的代码,在.net framework4.7下运行就不会有问题

问题展示:

在.net framework4.7下运行就不会有问题:

c#代码

 

 

 

 

...全文
157 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-05-15
精选
  • 打赏
  • 举报
回复
您的问题已经帮您同步至问答, 链接: https://ask.csdn.net/questions/7944980, 请您保持关注, 如果回答有帮助解决此问题, 麻烦您动动小手给相关的回答点赞, Ada会在评论区为您更新结题状态
2023大表舅 2023-05-15
  • 打赏
  • 举报
回复

可能是由于Marshal.Copy()函数在第一次执行时需要初始化额外的资源而导致的,这些资源可能与内部缓存、缓冲区、线程等有关。因此,第一次执行可能会出现不稳定的情况。一种解决方案是在第一次调用前先将float数组初始化为0,以确保调用时不会受到之前未初始化的数据的影响。另外,您还可以尝试调整缓冲区大小和步长等参数,以便更好地匹配C++数据结构的大小和格式。例如,如果C++中使用的是单精度浮点数,您可以确保在C#中也使用单精度浮点数来创建数组,以避免类型转换或截断错误。如果问题仍然存在,可以尝试使用更稳定的方法来进行数据交换,例如使用共享内存、网络套接字等。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧