要调用C++的API
int ZAZGetImage(HANDLE hHandle,int nAddr);
nAddr 是常量声明为 0xffffffff;在C#调用如下:
[DllImport("ZAZAPIt.dll")]
        public unsafe static extern int ZAZGetImage(IntPtr pHandle, int nAddr);请问 在C#中nAddr 这个常量该为多少?
是设置为0吗?

解决方案 »

  1.   

    uint nAddr = 0xffffffff;
      

  2.   

    因为C++函数指定了类型是int 如果声明uint的话需要转换成int类型会报溢出错误。而且这个api所有函数中有int nAddr 都声明为常量的0xffffffff 不知道为什么?
      

  3.   

    楼主,C++和C#的int 类型值范围区间一样,不需要改变,const int nAddr = 0xffffffff;有问题吗?
      

  4.   

    或者改声明:
    [DllImport("ZAZAPIt.dll")]
    public static extern int ZAZGetImage(IntPtr pHandle, uint nAddr);或者unchecked:
    int nAddr = unchecked((int)0xffffffff);
      

  5.   


    按照int nAddr = unchecked((int)0xffffffff); 得到的是-1 编译通过。但是函数返回值是错误的。
    不知道在C++中声明int 0xffffffff参数的作用是什么? 如何用-1传过去跟0xffffffff作用是一样的吗?
      

  6.   

    改声明:
    [DllImport("ZAZAPIt.dll")]
    public static extern int ZAZGetImage(IntPtr pHandle, uint nAddr);