调用c++的dll时需要转换类型! 最好还给解释下web窗体下怎么用unsafe代码!

解决方案 »

  1.   

    可以使用IntPtr类型unsafe代码,最好还是别用哈
      

  2.   

    long*
    这个是C++的指针,声明一个long类型的指针。
    如果要用到非安全代码给你个例子using System;
    class UnsafeTest
    {
       // Unsafe method: takes pointer to int:
       unsafe static void SquarePtrParam(int* p)
       {
          *p *= *p;
       }   unsafe static void Main()
       {
          int i = 5;
          // Unsafe method: uses address-of operator (&):
          SquarePtrParam(&i);
          Console.WriteLine(i);
       }
    }
      

  3.   

       如果把上面代码拉到我的页面的时候就提示:不安全代码只会在使用/unsafe编译的情况下出现! 这个求解决! 是web窗体!  再就是调用dll是提示intptr 与 ref int 类型不符! 好像只能应ref int  有没详细的关于ref int方面的资料给看看 - -! 谢谢 了!
      

  4.   

    “调用c++的dll时需要转换类型! ”,既然你是调用C++的动态库,主要是平台调用参数封送的事情:
    C++:
    void test(long*  num);C#:
    void test(ref int  num);注意:C++中的long是4个字节,而C#的是8个字节。
    所以对应的是int
      

  5.   

      知道了是ref int 的使用......可使用怎么使用 - -!有资料吗?
      

  6.   

    [DllImport("KERNEL32.DLL", CharSet = CharSet.Auto, EntryPoint = "GetSystemTimeAdjustment")]
    extern static int GetSystemTimeAdjustment(ref long adjustment, ref long clockInterval, ref bool adjustmentDisabled); //单位是100ns
      

  7.   


    楼主,真是无语!估计你刚刚入门net啊。不就是多了一个ref关键字吗?你查查MSDN就知道了:int a=3;
    test(ref a);
      

  8.   

     public  static extern int OperateUser(string DeviceIP, int CommandID, ref int pData, int sizepData);这个pData是一个结构体指针 - -!装的是一个结构体表的数据 我不会用 ! 能给我举个简单的例子吗?