那位 知道  c#在调用c++写的 dll动态链接库的时候,c++中有个函数的参数需要句柄为long型,不知道用c#如何给c++API传参数才能调用,请高手指点以下高分奖赏

解决方案 »

  1.   

    句柄类型一般使用c# IntPtr类型来对应。
      

  2.   

    MSDN的平台调用数据类型,給樓主參考。
    http://msdn.microsoft.com/zh-cn/library/ac7ay120(VS.80).aspx
      

  3.   

    C++的long 对应C#的 int32  如果是句柄那就是 IntPtr 
      

  4.   

    我试过 用IntPtr类型   因为我做的是  调用c++dll中的函数为其指定一个  容器如panel等作为视频的显示窗口我用InPtr类型 到没有 报错的得不到图像
      

  5.   

    Panel panel = new Panel();
                panel.Handle;
    应该传递panel.Handle,这样也不行吗?
      

  6.   

    我就是这样传的  AVC_StartView(t.Iconnect, panel1.Handle, 0, 0, 0, 0);
    结果 应该是  panel中接受的是摄像头中的视频  但这样传结果没有   我是在找不到原因  
    请大家帮帮忙   
      

  7.   

    AVC_StartView函数的代码有吗?
    如果有的话调试看看,传递的值可以修改为int类型的再试试;
    AVC_StartView(t.Iconnect, panel.Handle.ToInt32(), 0, 0, 0, 0); 
    或者
    unsafe { AVC_StartView(t.Iconnect, panel.Handle.ToPointer(), 0, 0, 0, 0); }
      

  8.   

    首先感谢你的帮助还是不行   是不是  不能用panel控件或其他什么原因?
      

  9.   

    使用IntPtr进行封送处理。 然后再使用Marshal类的方法获得需要的数据。
    如果你还不明白怎么做,我推荐你阅读刚刚出版的新书:《精通.NET互操作P/Invoke,C++Interop和COM Interop》,这本书详细且系统地介绍了.NET互操作的三种主要技术:P/Invoke,C++ Interop和COM Interop,你需要的问题在第2章“数据封送”中能找到解答。 
    该书的官方网站: 
    www.interop123.com 豆瓣网信息: 
    http://www.douban.com/subject/3671497/