如何把C++的头文件封装成C#格式

梦里独赏花 2012-06-13 09:26:27
如何把C++的头文件封装成C#格式
...全文
596 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
//客户端比对结果反馈函数类型
typedef void (*ReceiveFeaturePara)(char* client_IP, HS_FEATURE_PARA featurePara);

HISIGN_NET_API int __stdcall registCallBackFun(ReceiveFeaturePara pReceiveFeaturePara, ReceiveCmpResult pReceiveCmpResult);

这两个如何在C#中声明定义啊
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
一个是传递副本,一个传递指针,如果声明了就改成这样
public static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)]string lpszPathName, ref THIDEyePoint pEyePoint, IntPtr pFeatures);
[/Quote]

还有一个这样的不明白 1 ReceiveFeaturePara 这是什么类型 HISIGN_NET_API int __stdcall registCallBackFun(ReceiveFeaturePara pReceiveFeaturePara, ReceiveCmpResult pReceiveCmpResult);

如果C++这样声明的 unsigned long long time 应该转换成C#什么类型
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
一个是传递副本,一个传递指针,如果声明了就改成这样
public static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)]string lpszPathName, ref THIDEyePoint pEyePoint, IntPtr pFeatures);
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 11 楼 的回复:
引用 10 楼 的回复:
C# code

[DllImport("dll名", CallingConvention = CallingConvention.StdCall)]
private static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)] string ……
[/Quote]
那个结构体我已经声明了
public static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)]string lpszPathName, THIDEyePoint * pEyePoint, IntPtr pFeatures);

public static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)]string lpszPathName, THIDEyePoint pEyePoint, IntPtr pFeatures);

这两个的区别是什么?
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 10 楼 的回复:
C# code

[DllImport("dll名", CallingConvention = CallingConvention.StdCall)]
private static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)] string lpszPathName, ……
[/Quote]
那星号是指针,THIDEyePoint 这个结构体也要在C#中声明
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
C# code

[DllImport("dll名", CallingConvention = CallingConvention.StdCall)]
private static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)] string lpszPathName, THIDEyePoint* ……
[/Quote]

THIDEyePoint 它是一个结构体 那个*号起什么作用呀?
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
[DllImport("dll名", CallingConvention = CallingConvention.StdCall)]
private static extern int THIDGetFaceFeatFromImageW([MarshalAs(UnmanagedType.LPWStr)] string lpszPathName, THIDEyePoint* pEyePoint, IntPtr pFeatures);

THIDEyePoint 这个不知类型
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
struct
{
byte describe[256]; //结果描述
intptr pImageBuffer; //场景大图
int uImageSize; //场景大图数据大小
HS_RECT faceRect; //人脸位置
intptr pFaceBuffer; //抠出的人脸图片数据
int uFaceSize; //抠出的人脸图片数据大小

} HS_CMP_RESU……
[/Quote]


不好意思 再请教一个问题 那这个怎么改啊 int __stdcall THIDGetFaceFeatFromImageW(const wchar_t *lpszPathName, THIDEyePoint *pEyePoint, unsigned char *pFeatures); 谢谢
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Sequential)]
public struct HS_CMP_RESULT
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
byte[] describe; //结果描述
IntPtr pImageBuffer; //场景大图
int uImageSize; //场景大图数据大小
HS_RECT faceRect; //人脸位置
IntPtr pFaceBuffer; //抠出的人脸图片数据
int uFaceSize; //抠出的人脸图片数据大小
}

这里面包含 HS_RECT ,还需要知道这个的类型
足球中国 2012-06-13
  • 打赏
  • 举报
回复

struct
{
byte describe[256]; //结果描述
intptr pImageBuffer; //场景大图
int uImageSize; //场景大图数据大小
HS_RECT faceRect; //人脸位置
intptr pFaceBuffer; //抠出的人脸图片数据
int uFaceSize; //抠出的人脸图片数据大小

} HS_CMP_RESULT
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
1、c#没有头文件一说,所以谈不上‘转换’
2、假如要将c++代码转成c#,除非使用已编译好的c++动态库,否则还得要c++的实现文件
3、假如只是要把头文件的函数声明转换成c#,Microsoft P/Invoke Interop Assistant 是你的好帮手
[/Quote]

请问在C#中这个如何转换这个结构体
typedef struct
{
char describe[256]; //结果描述
unsigned char* pImageBuffer; //场景大图
int uImageSize; //场景大图数据大小
HS_RECT faceRect; //人脸位置
unsigned char* pFaceBuffer; //抠出的人脸图片数据
int uFaceSize; //抠出的人脸图片数据大小

} HS_CMP_RESULT
cnfixit 2012-06-13
  • 打赏
  • 举报
回复
1、c#没有头文件一说,所以谈不上‘转换’
2、假如要将c++代码转成c#,除非使用已编译好的c++动态库,否则还得要c++的实现文件
3、假如只是要把头文件的函数声明转换成c#,Microsoft P/Invoke Interop Assistant 是你的好帮手
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
具体类型具体处理,你把头文件贴上来看看吧



您可以告诉我 转换的思想和步骤吗?
[/Quote]
要使用到的类结构函数宏等在C#代码中映射
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
具体类型具体处理,你把头文件贴上来看看吧
[/Quote]


您可以告诉我 转换的思想和步骤吗?
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
具体类型具体处理,你把头文件贴上来看看吧
梦里独赏花 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
//客户端比对结果反馈函数类型
typedef void (*ReceiveFeaturePara)(char* client_IP, HS_FEATURE_PARA featurePara);

HISIGN_NET_API int __stdcall registCallBackFun(ReceiveFeaturePara pReceiveFeaturePar……
[/Quote]


谢谢你的帮忙 问题已经解决了
__天涯寻梦 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
//客户端比对结果反馈函数类型
typedef void (*ReceiveFeaturePara)(char* client_IP, HS_FEATURE_PARA featurePara);

HISIGN_NET_API int __stdcall registCallBackFun(ReceiveFeaturePara pReceiveFeaturePara, ReceiveCmpR……
[/Quote]
HS_FEATURE_PARA 和 ReceiveCmpResult 各是什么

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧