linux 的动态链接库 libgw.so 的函数 如下:

 struct lbt_chan
{
uint32_t freq_hz;
uint16_t scan_time_us;
};
struct lgw_conf_lbt_s
{
bool enable;
int8_t rssi_target;
uint8_t nb_channel;
struct lbt_chan channels[];
int8_t rssi_offset;
}; int board_setconf(struct conf_lbt_s cfg);
int board_setconf2(struct conf_lbt_s* cfg);

C#封装如下:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct lbt_chan
{
public UInt32 freq_hz;
public UInt16 scan_time_us;
}; [StructLayout(LayoutKind.Sequential)]
public struct conf_lbt_s
{
[MarshalAs(UnmanagedType.I1)]
public bool enable; public sbyte rssi_target;
public byte nb_channel; [MarshalAs(UnmanagedType.ByValArray, SizeConst = , ArraySubType = UnmanagedType.Struct)]
public lbt_chan[] channels; public sbyte rssi_offset;
}; [DllImport(@"libgw.so", EntryPoint = "board_setconf", CallingConvention = CallingConvention.Cdecl)]
extern public static Int32 board_setconf(conf_lbt_s cfg); [DllImport(@"libgw.so", EntryPoint = "board_setconf2", CallingConvention = CallingConvention.Cdecl)]
extern public static Int32 board_setconf2([MarshalAs(UnmanagedType.LPStruct)]conf_lbt_s cfg);

封装和win环境下一般无二。

这俩函数基本可以总结全部内容了。

特别要注意的是  CallingConvention = CallingConvention.Cdecl

  调用约定:

  1、Cdecl   调用方清理堆栈。 这使您能够调用具有 varargs 的函数(如 Printf),使之可用于接受可变数目的参数的方法。

  2、FastCall   不支持此调用约定。

  3、StdCall   被调用方清理堆栈。这是使用平台invoke调用非托管函数的默认约定。

  4、ThisCall   第一个参数是 this 指针,它存储在寄存器 ECX 中。 其他参数被推送到堆栈上。 此调用约定用于对从非托管 DLL 导出的类调用方法。

  5、Winapi   此成员实际上不是调用约定,而是使用了默认平台调用约定。 例如,在 Windows 上默认为 StdCall,在 Windows CE.NET 上默认为 Cdecl。

Linux 下 C# Mono P/Invoke .so 动态链接库。的更多相关文章

  1. 【ARM-Linux开发】linux下Eclipse进行C编程时动态链接库的生成和使用

    linux下Eclipse进行C编程时动态链接库的生成和使用 引用 http://linux.chinaitlab.com/soft/864157.html 欢迎进入Linux社区论坛,与200万技术 ...

  2. linux下Eclipse进行C编程时动态链接库的生成和使用

    引用 http://linux.chinaitlab.com/soft/864157.html 欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 一.创建动态链接库1.创建 ...

  3. linux下部署Mono oracle配置,oracle客户端安装

    一.Mono,apache安装,配置网站(以 centos 7 +apache 2为例): 安装教程以官网的教程为追,百度来的多少有版本问题. mono官网连接: 1. Mono的安装:https:/ ...

  4. Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器

    一.Mono产生的背景 由于Linux/Unix等有更强的安全性.运行效率高.拥有大量优秀的开源组件,而.Net则有着其他语言无与伦比的开发效率,因此在非微软平台下运行.Net程序的需求很强烈.Mon ...

  5. Linux下使用JNI的常见问题及解决方案

    JNI是java和C/C++混合编程的接口,可以很方便地实现java调用C/C++语言.具体的使用方法,网上有很多教程,在此不做过多介绍.本博客只关注在使用JNI的过程中的常见问题. 1.     生 ...

  6. .netcore在linux下使用P/invoke方式调用linux动态库

    http://www.mamicode.com/info-detail-2358309.html   .netcore下已经实现了通过p/invoke方式调用linux的动态链接库(*.so)文件 1 ...

  7. linux下mono的安装与卸载

    我很遗憾的告诉你,这里没有安装,为什么标题里加入安装俩字呢,因为如果不加的话你会搜到这篇文章吗?哈哈!别气馁,这里会给你些安装的tips! 源码安装,git安装:建议安装路径如下,至于为什么,我也讲不 ...

  8. linux下mono播放PCM音频

         测试环境: Ubuntu 14 MonoDevelop CodeBlocks 1.建立一个共享库(shared library) 这里用到了linux下的音频播放库,alsa-lib. al ...

  9. Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)

    1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...

随机推荐

  1. JavaScript03-基本概念一

    js包括:语法.语句.类型.关键字.保留字.操作符和对象. 语法.关键字.保留字 1.js中一切区分大小写,包括变量.函数名.操作符: 2.标识符规则,第一个字符必须是字母.下划线_.或者美元符号,其 ...

  2. [usaco18Feb] New Barns

    题意 每次新建一个节点,并与一个已知节点连边.(或者不连).多次询问以某个已知点点出发的最远路径长度. 分析 显然,在任何时候图都是一个森林.由树的直径算法可知,与某点最远距的点必然是树的直径的一段. ...

  3. nginx 关于client_max_body_size client_body_buffer_size配置

    最近生产环境在这两个参数之间遇到过几次坑.这里记录下.client_max_body_sizeclient_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Conten ...

  4. Python内置函数(60)——staticmethod

    英文文档: staticmethod(function) Return a static method for function. A static method does not receive a ...

  5. 微信小程序实战--集阅读与电影于一体的小程序项目(一)

    1.首页欢迎界面 项目目录结构 新建项目ReaderMovie,然后新建文件,结构如下 welcome.wxml <view class='container'> <image cl ...

  6. .NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理

    通过 ASP.NET Core,开发者可轻松配置和管理其应用的安全性. ASP.NET Core 中包含管理身份验证.授权.数据保护.SSL 强制.应用机密.请求防伪保护及 CORS 管理等等安全方面 ...

  7. 【Docker】(2)---仓库、镜像、容器

    [Docker](2)---仓库.镜像.容器     学习Docker,我觉得首先要了解的是仓库.镜像.容器到底是什么,他们有什么区别. 一.通俗理解 1.Docker 镜像 (images) 容器运 ...

  8. hexo配置自己的博客站点

    最近业余时间利用hexo为自己搭建一个高度自定义的个人站点,站点发布在github上,访问地址为:https://cqhaibin.github.io/.本博客简单介绍实现此站点的过程.效果图如下 构 ...

  9. 【C#加深理解系列】(二)序列化

    什么是序列化 序列化,它又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用. ...

  10. 【c#】RabbitMQ学习文档(五)Topic(主题。通配符模式)

    (本实例都是使用的Net的客户端,使用C#编写),说明,中文方括号[]表示名词. 在上一个教程中,我们改进了我们的日志记录系统. 没有使用只能够进行虚拟广播的[Fanout]交换机,而是使用了[Dir ...