我现在要把c#的object类型 转为unmanaged c++ void* . 有没有什么好的办法 ?

解决方案 »

  1.   

    vc void** 与 c# 下的 类型 怎么 匹配
    2008-01-08 19:17:14   来源:论坛整理   作者:mybabyyuli   【大 中 小】 评论:0 条   收藏本文 
     下面是测试类的代码: 
    注重: 
    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: 在此处添加代码以启动应用程序 
    // 

    }
    网友回复:XID_Handle是整形数吧 如同HWND? 
    你可以使用unsafe代码。。在C#中返回int**
    网友回复:请大家看好帖子的注重事项,ls的谢谢啊,XID_Handle是void*类型的
    网友回复:我用了下二楼的建议,得到的结果跟用IntPtr的结果一样,抛同样的异常
    网友回复:呵呵。。不好意思。刚刚没有深入考虑。 其实不管是 void** 还是 void******,其实都是一样的int. 
    所以直接用IntPtr做返回值就可以了。
    网友回复:呵呵,谢谢,异常我找到了,我把那些动态库都放到system32底下就好了,编译器的错误,不过还是谢谢,证实事实是这样的,呵呵,分就给你了