我现在要把c#的object类型 转为unmanaged c++ void* . 有没有什么好的办法 ?
解决方案 »
- C#如何实现面板中用鼠标框选多个控件
- 正则问题,限制用户在TextBox输入。
- 关于tableLayoutPane,在线求助
- 发布后的程序无法读取XML文件
- 怎么样在datagridview 中添加Listbox !!!!急.谢谢!
- 菜鸟学C#,求教!!!
- 求C#操作ffmpeg压缩摄像头视频流。
- 请问高手们:用GDI+ 如何实现图形的放大与缩小
- ==========简单问题(ASP.NET Web 服务新建)====
- 简单问题,C#里面如何实现类似VB的Space函数功能?
- SplitContainer右侧里的窗体里的textbox里的内容没法用光标定位
- tabcontrol控件切换时应该在哪个事件中加入正确性验证代码段?
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底下就好了,编译器的错误,不过还是谢谢,证实事实是这样的,呵呵,分就给你了