当前位置: 首页 > news >正文

做房产网站赚钱吗济南智能网站建设费用

做房产网站赚钱吗,济南智能网站建设费用,软考证书有用吗张雪峰,网络推广培训课程4万在使用第三方的非托管API时#xff0c;我们经常会遇到参数为指针或指针的指针这种情况#xff0c; 一般我们会用IntPtr指向我们需要传递的参数地址#xff1b; 但是当遇到这种一个导出函数时,我们如何正确的使用IntPtr呢#xff0c; extern C __declspec(dll…在使用第三方的非托管API时我们经常会遇到参数为指针或指针的指针这种情况 一般我们会用IntPtr指向我们需要传递的参数地址 但是当遇到这种一个导出函数时,我们如何正确的使用IntPtr呢 extern C __declspec(dllexport) int GetClass(Class pClass[50])  由于这种情况也经常可能遇到所以我制作了2个示例程序来演示下如何处理这种非托管函数的调用 首先创建一个C 的DLL  设置一个如上的导出函数 #include Windows.h  #include stdio.htypedef struct Student  { char name[20]; int age; double scores[32]; }Student;typedef struct Class {int number;Student students[126];  }Class;extern C __declspec(dllexport)int GetClass(Class pClass[50]) {     for(int i0;i50;i)     {        pClass[i].numberi;        for(int j0;j126;j)        {            memset(pClass[i].students[j].name,0,20);       sprintf(pClass[i].students[j].name,name_%d_%d,i,j);   pClass[i].students[j].agej%20?15:20;       }     }     return 0;30  } 上面DLL 的导出函数要求传递的参数为它自定义的Class结构体数组 那么我们在C#调用它时也要自定义对应的结构体了 我们可以定义为如下 [StructLayout(LayoutKind.Sequential)]struct Student{[MarshalAs(UnmanagedType.ByValTStr,SizeConst20)]public string name;public int age;[MarshalAs(UnmanagedType.ByValArray,SizeConst32)]public double[] scores;}[StructLayout(LayoutKind.Sequential)]struct Class{public int number;[MarshalAs(UnmanagedType.ByValArray,SizeConst126)]public Student[] students;} 需要注意的是这2个结构体中的数组大小一定要跟C中的限定一样大小哦接下来如何使用这个API来正确的获取数据呢大多数人可能想到像这样的处理方式 Class myclass new Class(); IntPtr ptrMarshal.AllocHGlobal(Marshal.SizeOf(typeof(Class))); GetClass(ptr); Marshal.FreeHGlobal(ptr); 没错这样的处理是没问题的但是我们的API的参数是Class数组这种处理方式只是传递一个Class结构体参数,所以这种方式在这里就不太合适了 那大家就想到先Class[] myclass  new Class[MaxClass]; 然后在用Marshal.AllocHGlobal 来获取myclass 数据的指针 其实这样也是错的 因为 Class结构中包含了不能直接封送的Student结构所以无论如何上面的想法是错误的 那要怎么办呢其实很简单就是先分配一段非托管内存并调用API后再将非托管内容数据读取到托管结构体数据中 static void Main(string[] args) {int size  Marshal.SizeOf(typeof(Class)) * 50;byte[] bytes  new byte[size];IntPtr pBuff  Marshal.AllocHGlobal(size);Class[] pClass  new Class[50];GetClass(pBuff);for (int i  0; i  50; i){IntPtr pPonitor  new IntPtr(pBuff.ToInt64()  Marshal.SizeOf(typeof(Class)) * i);pClass[i]  (Class)Marshal.PtrToStructure(pPonitor, typeof(Class));}Marshal.FreeHGlobal(pBuff);Console.ReadLine(); }
http://wiki.neutronadmin.com/news/2947/

相关文章:

  • 网站建设 市场规模大型国有企业网站建设
  • 外贸公司有必要建设网站吗免费网站建设策划
  • 网站是否需要备案电商运营网站 建设
  • 外贸那些网站好用国外企业合作的网站
  • 黔南州建设局网站做微信首图的网站
  • 做全国社保代理的网站公司网站注册要多少钱
  • 网站制作方案专业乐云seo海南创作什么网站
  • 团购网站模板下载微信手机网页登录入口
  • 东莞网站设计资讯网站开发目的
  • 建设网站公司怎么收费惠州制作网站软件
  • 新网站上线 怎么做seo做华为网站的还有哪些
  • 昆明网站建设天猫运营网站开发实战
  • 北京市建设厅官方网站百度人工优化
  • 企业网站在线留言熟悉免费的网络营销方式
  • 高端企业网站制作做网站的劣势
  • 做一个网站需要怎么做网站建设没业务
  • 做ps兼职的网站wordpress 手动上传主题
  • 重庆住建厅网站官网前端vue低代码开发平台
  • 网站版本功能列表成都网站建设公司排名
  • 电商网站建设公司网页设计要用到什么软件
  • 爱看视频的网站陕西省建设厅
  • 共创福州网站建设网站的建设书籍
  • seo网站优化推广怎么样免费的ppt网站推荐
  • 全屋家具定制价格表wordpress 中文seo
  • 1个服务器可以做多少个网站学平面设计要多少钱
  • 建设网站的公司要什么资质吗wordpress清新主题
  • 游艇网站建设方案南和网站建设公司太原网站建设
  • 在线音乐网站源码微信营销成功案例8个
  • 周口建设网站深圳网址排名
  • 找合伙做网站的wordpress添加视频的两个常用方法