在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#时候到底发生了什么?

解决方案 »

  1.   

    什么意思?
    补充一点,当在c#中把ushort型的数组转换为byte传给dll,是没有问题的。
    出问题的是在c++中将float的值写入pMem。然后在c#中读出来float的是错的,
    难道float在c++和c#中表示方式不一样?
      

  2.   

    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 )) ;
      

  3.   

    谢谢你的解答,但是结果还是不行。
    跟原来一样。c++中看到e0 c9 ee 42 ed 2d ef 42 e6 fb ee 42……
    c#中看到 00 c0 98 44 00 00 99 44 00 e0……
    总是如此。
      

  4.   

    源代码之间的耦合太强了,还要调用别的dll,可能读起来很费时。
    刚才发现了一处内存泄露,另外还发现在c++里面有一处分配内存不够。可能与此有关。
    等我把问题彻底找出来,发个总结,再次感谢你!