类似接口定义:C++中可以这样调用没有错
BYTE* pF;
pF = new BYTE[1];
ApiFunc((void **)&pf);C#中测试了接口定义为
1 ApiFunc(ref uint[] ppPara)
2 ApiFunc(ref uint ppPara)
3 ApiFunc(uint ppPara)
4 ApiFunc(byte[] ppPara)
5 ApiFunc(ref IntPtr ppPara)
按以上接口调用均失败,请教void **类型参数在C#的API调用定义中该如何定义.

解决方案 »

  1.   

    vb中引用定义为 ApiFunc(byref ppPara as long)应用如下也正确:
    dim ppPara as long
    ApiFunc(ppPara)C#试了很多方法不对.
      

  2.   

    我也想学API函数,可惜还不会呦!声援一下
      

  3.   

    这样试试看
    byte[] bytes= new byte[1];
    fixed(byte *b = bytes)
    {
    void **p = (void**)b;
    string s = Convert.ToString(gg(p),16);
    }
    private uint gg(void **p)
    {
    return (uint)p;
    }
      

  4.   

    ApiFunc(ref IntPtr ppPara)
    这个应该可以解决吧,楼主在试试看^_^
    今天下午我也遇到了同样的问题,最后的解决方法是在函数原型的相映参数前加上ref参数,然后在调用函数时,给相映参数传值时同样加上ref参数。例如:
    System.IntPtr aaa=new System.IntPtr();
    ApiFunc(ref aaa);
      

  5.   

    try ApiFunc(ref byte[] ppPara)
      

  6.   

    以下接口我都试过了,那是个图像卡操作的接口,在vc vb dephi 中都已经正常实现:C#中测试了接口定义为
    1 ApiFunc(ref uint[] ppPara)
    2 ApiFunc(ref uint ppPara)
    3 ApiFunc(uint ppPara)
    4 ApiFunc(byte[] ppPara)
    5 ApiFunc(ref IntPtr ppPara)
    按以上接口调用均失败...
      

  7.   

    http://www.cnblogs.com/zhuor/archive/2005/08/26/223121.html
    上面是的C#中调用windows的API的,楼主可以看看。
      

  8.   

    兄弟,我来也,我帮你解决啊!!!!!!1)开始Unsafe模式
    2)参考如下代码C#定义: ApiFunc(uint ppPara); //把指针定义为整数unsafe void Test()
    {
    byte[] bytes = new byte[100]; fixed(byte* lpBuf = bytes)
    {
    uint address = (uint)lpBuf;
    uint* p = &address;
                            //调用
                            ApiFunc((uint)p);                         
    }
    }这样就把双指针传进去了,注意,你C++代码最好不要改变指针地址!祝你好运!
      

  9.   

    下面这样可能更好理解一点unsafe void Test()
    {
    byte[] bytes = new byte[4];
    fixed(byte* lpBuf = bytes)
    {
    uint address = (uint)lpBuf;
    void** p = (void**)&address;
    //调用
    ApiFunc((uint)p);
    }
    }
      

  10.   

    ApiFunc([in,out] ref IntPtr ppPara)