109,339
社区成员




1、 .net6使用Marshal.Copy()函数将c++dll返回的float指针,转换成c#的float数组,第一次执行得到的数据都是一些乱七八糟的数值,然后再重复执行,就不会有问题,这是什么原因呢,怎么解决?
2、同样的代码,在.net framework4.7下运行就不会有问题
问题展示:
在.net framework4.7下运行就不会有问题:
c#代码
可能是由于Marshal.Copy()函数在第一次执行时需要初始化额外的资源而导致的,这些资源可能与内部缓存、缓冲区、线程等有关。因此,第一次执行可能会出现不稳定的情况。一种解决方案是在第一次调用前先将float数组初始化为0,以确保调用时不会受到之前未初始化的数据的影响。另外,您还可以尝试调整缓冲区大小和步长等参数,以便更好地匹配C++数据结构的大小和格式。例如,如果C++中使用的是单精度浮点数,您可以确保在C#中也使用单精度浮点数来创建数组,以避免类型转换或截断错误。如果问题仍然存在,可以尝试使用更稳定的方法来进行数据交换,例如使用共享内存、网络套接字等。