c类型的结构体转成c#的结构体,请大神指导。。。

skl_1 2017-09-04 03:56:48
1、如下是C类型的结构体:

typedef unsigned char MUInt8;

typedef signed int MInt32;

typedef unsigned int MUInt32;

typedef void* FaceEngine;

typedef MLong MRESULT;


/*Define the image format space*/
typedef struct __tag_OFFSCREEN
{
MUInt32 u32PixelArrayFormat;
MInt32 i32Width;
MInt32 i32Height;
MUInt8* ppu8Plane[4];
MInt32 pi32Pitch[4];
} OFFSCREEN, *LPOFFSCREEN;

/*Define the rect */
typedef struct __tag_rect
{
MInt32 left;
MInt32 top;
MInt32 right;
MInt32 bottom;
} MRECT, *PMRECT;

/*Define the face result*/
typedef struct __tag_FaceResult
{
int nface_;
MRECT *rcface_;
float *score_;
} FaceResult, *PFaceResult;

请问下 OFFSCREEN 、FaceResult这几个结构体翻译成 C#格式 的结构体是怎么样的?



2、请问下几个API如何转换成C#的接口?

AFD_API MRESULT AFD_Initial(FaceEngine *face_engine, const int max_face_num = 10, const int nscale = 16,
const float threshold = 0.7f, const int enable_tracking = 0, const int device_id = 0);

AFD_API MRESULT AFD_Detect(FaceEngine face_engine, const OFFSCREEN & img, FaceResult **face_res,
const MRECT *roi_rect = NULL, const int roi_num = 0);

AFD_API void AFD_Release(FaceEngine face_engine);


请大神指教,谢谢!
...全文
253 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skl_1 2017-09-06
  • 打赏
  • 举报
回复
帖子别沉啊 ,召唤大神们
skl_1 2017-09-05
  • 打赏
  • 举报
回复
下面是我转换的结构体和接口,大神们帮忙看看对不对。。

/*Define the rect*/    
        public struct MRECT
        {
             int left;
             int top;
             int right;
             int bottom;
        } 

         public struct MPOINT
        { 
            int x; 
            int y; 
        } 


/*Define the image format space*/    
        [StructLayout(LayoutKind.Sequential)]
        public struct OFFSCREEN
        {
            uint  u32P下ixelArrayFormat;
            int  i32Width;
            int  i32Height;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]  
            string[] ppu8Plane;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] 
            uint[]  pi32Pitch;
        };

/*Define the face result*/    
        public struct FaceResult 
        {
            public int nface_;
            public MRECT *rcface_;
            public float *score_; 
        };
接口:

        [DllImport(@"\ArcsoftSDK\arcsoft_face_detection.dll", EntryPoint = "AFD_Initial", CallingConvention = CallingConvention.StdCall)]
        public static extern int AFD_Initial(ref FaceEngine face_engine, int max_face_num = 10, int nscale = 16, float threshold = 0.7f, int enable_tracking = 0, int device_id = 0);


        [DllImport(@"\ArcsoftSDK\arcsoft_face_detection.dll", EntryPoint = "AFD_Detect", CallingConvention = CallingConvention.StdCall)]
        public static extern int AFD_Detect(FaceEngine face_engine, ref OFFSCREEN img, ref FaceResult face_res, MRECT roi_rect = NULL, int roi_num = 0);


        [DllImport(@"\ArcsoftSDK\arcsoft_face_detection.dll", EntryPoint = "AFD_Release", CallingConvention = CallingConvention.StdCall)]
        public static extern void AFD_Release(FaceEngine face_engine);
  • 打赏
  • 举报
回复
把你自己定义的类型替换成对应的类型就可以了,下面是个例子 http://www.cnblogs.com/HuangWj/p/5633675.html
xdashewan 2017-09-05
  • 打赏
  • 举报
回复
typedef定义了原类型,根据元类型转换成c#类型,对应关系不明确的可以网上查
skl_1 2017-09-05
  • 打赏
  • 举报
回复
求大神指导。。
skl_1 2017-09-05
  • 打赏
  • 举报
回复
求大神帮忙看看
Kay_OBJECT 2017-09-04
  • 打赏
  • 举报
回复
我是为了你的头像进来的 {emoji}{emoji}
一、Go语言的由来      Go语言亦叫Golong语言,是由谷歌Goggle公司推出。Go语言的主要开发者有:肯.汤姆逊(Ken Thompson)、罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。这三个都是大神,稍介绍一下他们的贡献:     肯.汤姆逊(Ken Thompson):图灵奖得主,Uinx发明人,B语言作者(C语言前身),还做飞行员,后来被谷歌挖走。     罗布.派克(Rob Pike):Unix团队和Plan 9操作系统计划的成员,与Ken老爷子共事多年,并共创出广泛使用的UTF-8 字元编码。     罗伯特.格里泽默(Robert Griesemer):曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。     膜拜一下大神的容颜:Ken老爷子(左),Rob Pike(右)         二、开发Go语言的初衷     根据Go语言开发者自述,近10多年,从单机时代的C语言到现在互联网时代的Java,都没有令人满意的开发语言,而 C++往往给人的感觉是,花了100%的经历,却只有60%的开发效率,产出比太低,Java和C#的哲学又来源于C++。并且,随着硬件的不断升级,这些语言不能充分的利用硬件及CPU。因此,一门高效、简洁、开源的语言诞生了。 三、Go语言的特点    Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言:Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。 Go语言有以下特性: 1.自动垃圾回收     C/C++最头疼的就是指针问题,一不小心就野指针了或者又越界了。在Go语言里再也不用担心,也不用考虑delete或者free,系统自动会回收。 2.函数可以返回多个值     这个很神奇,大多数语言只能返回一个值,Go语言可以返回多个值。这个功能使得开发者再不用绞尽脑汁的想到底怎么返回值的设计,也不用为了传值专门定义一个结构体。 3.并发编程     Go语言天然并发,只需要关键字“go”就可以让函数并发执行,使得并发编程变得更为简单,这也是Go语言最大的优势。 四、Go语言能做什么开发     Go语言是非常有潜力的语言,是因为它的应用场景是目前互联网非常热门的几个领域,比如区块链开发、大型游戏服务端开发、分布式/云计算开发。像Goggle、阿里、京东等互联网公司都开始用Go语言开发自己的产品。

110,536

社区成员

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

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

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