下面是测试类的代码:
    注意:
       1。在dll中XID_Handle被预定义为void*类型的
       2.函数 XID_Init(string str1,sting str2,int i) 的返回类型是 XID_Handle* 类型的即void**类型,
       3.因为有关资料显示vc中void* 与c#的object类型匹配,所以void**的应该就与object[]类型匹配,所以定义
         XID_Handle 为object[]类型的,但是最后运行的时候会抛出异常,内容为 无法封送:return value
      4.请高手指点,感激不尽
       class Class1
{
//initializeation IntPtr               // 在dll中XID_Handle被声明为void*类型的 object[] XID_Handle=new object[1];
//redifine dll port mathod
//initializeation xid engin
[DllImport("F:\\prj\\c++\\Enroll\\XID_FaceRecognition.dll")]
//private extern static IntPtr LoadLibrary(String path);
public static extern object[] XID_Init(string settingsFile,string mode,int nb_records);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Class1 cl=new Class1();
try
{
cl.XID_Handle=XID_Init"C:\\API_XID_EXE\\FaceRecognition.ini","Enroll",1);
Console.WriteLine(""+cl.XID_Handle);
Console.Read();
}
catch(Exception e)
{
Console.WriteLine(e.Message.ToString());
}
Console.Read();
//
// TODO: 在此处添加代码以启动应用程序
//
}
}

解决方案 »

  1.   

    XID_Handle是整形数吧 如同HWND? 
    你可以使用unsafe代码。。在C#中返回int**
      

  2.   

    请大家看好帖子的注意事项,ls的谢谢啊,XID_Handle是void*类型的
      

  3.   

    我用了下二楼的建议,得到的结果跟用IntPtr的结果一样,抛同样的异常
      

  4.   

    呵呵。。不好意思。刚刚没有深入考虑。 其实不管是 void** 还是 void******,其实都是一样的int.
    所以直接用IntPtr做返回值就可以了。
      

  5.   

    呵呵,谢谢,异常我找到了,我把那些动态库都放到system32底下就好了,编译器的错误,不过还是谢谢,证明事实是这样的,呵呵,分就给你了