遇到了封装C#封装C++接口的困难,望各位前辈鼎力相助,在此谢过。
现在C++提供的接口中的文件中关键问题是这样定义的typedef struct tagDB_HANDLE* DB_HANDLE;DDB_DECL int DBInit(DB_HANDLE* hd, const TCHAR* filename);DDB_DECL int DBUninit(DB_HANDLE hd);问题:1.对C我不是很熟,上面的定义中,我认为tagDB_HANDLE是一个结构体,可是这个结构体在提供的.h文件中被注销了,不明白。2.接口中的注释只有一部分。对于DBInit函数的第一个参数的意思是没有给出注释?我认为是由它获得hd的指针后,再将它传到下面的DBUninit函数中使用,不知道是不是这样的,现在也只能凭猜测。3.也就是最重要的,DBInit中的参数应该是结构体的二级指针吧,请问用C#该如果封装呢?如果是一级指针还好办些,但是二级指针实在是没有接触过,网上能找到的方法基本上都试过了,现在没辙了,只有求助大家了。

解决方案 »

  1.   

       
     [System.Runtime.InteropServices.DllImportAttribute("yourdll", EntryPoint="DBInit")]
    public static extern  int DBInit(ref System.IntPtr hd, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPTStr)] string filename) ;
        [System.Runtime.InteropServices.DllImportAttribute("yourdll", EntryPoint="DBUninit")]
    public static extern  int DBUninit(System.IntPtr hd) ;试下了
      

  2.   


    谢谢,但是它只提供了个注释不全的接口.h,调用文档都没有,更没有给出C++的调用的Demo。现在只能靠自己一步一步的摸索研究了。
      

  3.   

    http://blog.csdn.net/okadler0518/archive/2009/06/22/4289679.aspxC# 封装C++ DLL参数类型比较重要。 
      

  4.   

    在C#中使用unsafe关键字,就可以象C++一样操作指针,我只写过简单的代码,不知道对你会不会有帮助。
    参考下面的文章:
    http://blog.csdn.net/lsd123/archive/2008/09/06/2890377.aspx