在c#中调用c++写的myCpp.dll的函数,假设是getData(void* pMem),getData往pMem中写一些数据。
我在c#中这么调用,
[DllImport("myCpp.dll")]
public static extern void getData(byte[] pMem);byte[] b = new byte[50,000];
getData(b);
问题是运行时得不到想要的结果。
于是在myCpp.dll中设断点调试,这样却总是在C#得到正确的结果。请问是怎么回事?在从dll返回c#时候到底发生了什么?
我在c#中这么调用,
[DllImport("myCpp.dll")]
public static extern void getData(byte[] pMem);byte[] b = new byte[50,000];
getData(b);
问题是运行时得不到想要的结果。
于是在myCpp.dll中设断点调试,这样却总是在C#得到正确的结果。请问是怎么回事?在从dll返回c#时候到底发生了什么?
补充一点,当在c#中把ushort型的数组转换为byte传给dll,是没有问题的。
出问题的是在c++中将float的值写入pMem。然后在c#中读出来float的是错的,
难道float在c++和c#中表示方式不一样?
MYDLL_API int fnmydll( void *p )
{
if( p != NULL )
{
float i= 1.6f;
memcpy( p , &i ,sizeof(float));
return 1;
}
return 0;
}
c#
System.IntPtr p = Marshal.AllocHGlobal( Marshal.SizeOf( typeof(float )));
fnmydll( p );
float b = (float)Marshal.PtrToStructure( p , typeof( float )) ;
跟原来一样。c++中看到e0 c9 ee 42 ed 2d ef 42 e6 fb ee 42……
c#中看到 00 c0 98 44 00 00 99 44 00 e0……
总是如此。
刚才发现了一处内存泄露,另外还发现在c++里面有一处分配内存不够。可能与此有关。
等我把问题彻底找出来,发个总结,再次感谢你!