none
C#调用c++ dll运行结果不正确 RRS feed

  • 问题

  • c++:

    bool Test(short *data,float a,float &b);


    c#调用:

     
    [DllImport("Test.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]  
     public static extern bool Test(short[] data, float a, ref float b);      
    
        void Mytest()     
         {          
             byte[] by=System.IO.File.ReadAllBytes(@"c:\a.txt");  
              short[] data=new short[by.Length/2];  
              for (int i = 0; i < data.Length; i++)   
               {             
                  data[i]=BitConverter.ToInt16(by,2*i);      
               }   
             float b=0;      
             bool res = Test(data, 0, ref b);  
         }

    大概是这个样子..

    就结果而言 C#调用成功返回true,但是和用c++调用返回结果不一致(返回false);

    c++调用方法:

    具体代码因为我不熟悉c++所以不能列出,不过大致上是通过读取文件流通过memcpy到short *tmp 中再调用dll方法。

    测试中文件为相同文件...

    请问这种情况大概是什么原因?


    • 已编辑 Solapvk 2013年9月13日 14:07 补充
    2013年9月13日 12:38

答案

  • ----问题解决:

    C++中bool占一个字节,C#中bool占4个字节

    [DllImport("Test.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]  
     public static extern byte Test(short[] data, float a, ref float b);  

    正确...

    • 已标记为答案 Solapvk 2013年9月14日 9:28
    2013年9月14日 9:28

全部回复

  • ----问题解决:

    C++中bool占一个字节,C#中bool占4个字节

    [DllImport("Test.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]  
     public static extern byte Test(short[] data, float a, ref float b);  

    正确...

    • 已标记为答案 Solapvk 2013年9月14日 9:28
    2013年9月14日 9:28
  • 谢谢。

    希望能够分享更多的开发经验。共同学习,共同进步。


    Caillen
    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年9月16日 2:16
    版主