下面是测试类的代码:
注意:
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。在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: 在此处添加代码以启动应用程序
//
}
}
你可以使用unsafe代码。。在C#中返回int**
所以直接用IntPtr做返回值就可以了。