http://blog.csdn.net/xinyaping/article/details/7672171
前写过一篇小短文:《[科普小短文]在C#中调用C语言函数
》,是在Windows平台下基于Microsoft.Net的一个例子。今天我们来做另外一个小例子,是在Linux平台下基于Mono的例子。关于在C#中调用C语言函数的具体技术P/Invoke,在之前那篇文章《[科普小短文]在C#中调用C语言函数
》中有介绍,不了解的读者可以去看一下,这里不多介绍了,直接来看我们的例子。
一、准备动态链接库
C语言源代码:Test.c 和我们之前那个Windows平台的代码是一致的:
-
int
sum(
int
a,
int
b)
-
{
-
return
a + b;
-
}
我们用gcc来把它编译成动态链接库 libtest.so
-
gcc -c -Wall -Werror -fpic Test.c
-
gcc -shared -o libtest.so Test.o
这样我们就得到了 libtest.so 这个动态链接库。
无图无真相,我们看一下截图:
二、在C#中通过P/Invoke调用Test.dll中的sum()方法
我们用 vi 来编写一个简单的C#程序:Invoke.cs
这个C#程序除去注释、除去namespace定义、引用之外,只有6行代码:
-
-
-
-
-
-
namespace
Invoke
-
{
-
using
System;
-
using
System.Runtime.InteropServices;
-
-
-
-
-
internal
class
Program
-
{
-
-
-
-
-
internal
static
void
Main(
string
[] args)
-
{
-
int
result = Sum(2, 3);
-
Console.WriteLine("Shared library func execute result: {0}"
, result);
-
}
-
-
-
-
-
-
-
-
[DllImport("libtest.so"
, EntryPoint =
"sum"
)]
-
private
static
extern
int
Sum(
int
a,
int
b);
-
}
-
}
在命令行下编译该C#源文件:
这样就编译出了一个基于mono的可执行文件 Invoke.exe
三、执行
我们把 libtest.so 拷贝到 /lib 目录下,以便我们的程序能找到它。为什么放到这个目录下呢?这是根据Linux操作系统搜寻动态链接库的规则来做的,对此问题如果希望详细解释的话,请阅读有关Linux系统的文档、手册。
执行我们的C#代码编译得到的可执行文件:
得到了和《[科普小短文]在C#中调用C语言函数
》一文中一样的执行结果:
-
Shared library func execute result: 5
无图无真相,我们再来一张截图:
相关链接:
分享到:
相关推荐
C语言在以其目标代码质量高,使用灵活,数据类型丰富,可移植性好等特点而得到广泛的普及和迅速发展,成为一种在系统软件开发、科学计算、自动控制等各个领域广泛应用的程序设计语言。在众多高级程序设计语言竞显...
8.4.3 被调用函数的声明和函数原型 107 8.5 函数的嵌套调用 108 8.6 函数的递归调用 109 8.7 数组作为函数参数 110 8.8 局部变量和全局变量 112 8.8.1 局部变量 113 8.8.2 全局变量 119 8.9 变量的存储类别 120 78.9...
C语言写的世界程序大赛获奖作品。。很震撼
试论C语言在高校计算机专业课程中的意义 摘要:c语言是高校计算机相关专业的基础课程之一,是计算机专业学生必须具备的 基本技能之一。c语言功能强大、应用广泛,在计算机相关科技领域中不断发展,渐趋完 善。本文...
8.4.3 被调用函数的声明和函数原型 107 8.5 函数的嵌套调用 108 8.6 函数的递归调用 109 8.7 数组作为函数参数 110 8.8 局部变量和全局变量 112 8.8.1 局部变量 113 8.8.2 全局变量 119 8.9 变量的存储类别 120 78.9...
在 C语言中,可以通过循环和条件判断等基本语句,来实现水仙花数的求解。 下面是一个简单的 C语言程序,用于求解三位数中的水仙花数: #include int main() { int num, digit, sum; printf("Three-digit ...
物联网与互联网一字之差,“差”在哪里?不同的专家学者对这个“差”有不同的理解,有共识也有争论。本书讨论了物联网的起源与发展、核心技术、主要特点以及应用前景,为读者勾画出一个具有鲜明特征的物联网时代。...
随着计算机技术的飞速发展,计算机在企业、高校等管理中应用的普及,利用计算机实现高效、智能的管理势在必行。对于知识创新的主体,高校教育来说,更应该着重实际,从身边做起,利用高科技解决实际问题,适应现代...
物联网与互联网一字之差,“差”在哪里?不同的专家学者对这个“差”有不同的理解,有共识也有争论。本书讨论了物联网的起源与发展、核心技术、主要特点以及应用前景,为读者勾画出一个具有鲜明特征的物联网时代。...
学了物理实验>>的人都知道,物理实验最麻烦的是数据处理,现在都是信息时代了,那种含有十几位小数的数据居然还要用手来一个个地算,真是太对起自己了,以下这个程序可以算平均值,残差,标准偏差,和总不确定度,...
World Wind(简称WW,中文民间直译为世界风),是NASA发布的一个开放源代码(Open Source)的地理科普软件(由NASA Research开发,由NASA Learning Technologies来发展),它是一个可视化地球仪,将NASA、USGS以及其它WMS...
函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。 值传递(passl-by-value)过程中,被调函数的形式参数作为被...
七年级语文科普短文两篇PPT教案.pptx
OUT 根据OUTPUT 链(在filter 表中)中的规则对数据包进行检查,如果规则匹配,则回调函数按规则所 指定的动作来处理该包,否则丢弃该包。 2.2 Netfilter 内核框架 Netfilter 是Linux2.4.x 内核中用于包处理的抽象、通用...
物联网与互联网一字之差,“差”在哪里?不同的专家学者对这个“差”有不同的理解,有共识也有争论。本书讨论了物联网的起源与发展、核心技术、主要特点以及应用前景,为读者勾画出一个具有鲜明特征的物联网时代。...
一些Linux的入门基础科普 终端命令格式 Ubuntu 图形界面入门 操作系统科普章节 虚拟机 操作系统的发展史 Linux 内核及发行版 Linux 的应用常用 Linux 命令的基本使用 其他命令 文件和目录文件和目录常用命令 系统...
他于90年代初在央视1套系统向全国介绍了C、C++、JAVA等7种计算机语言,并同时让计算机科学走进寻常百姓家。他也是享受政府特殊津贴专家,北京市有突出贡献专家,全国高校计算机基础教育研究会会长。曾任清华大学绵阳...
人类历史上的信息革命 第一次 信息革命 第二次 信息革命 第三次 信息革命 第四次 信息革命 第五次 信息革命 第六次 信息革命 语言的创造 猿 人 信息得以交流和传递 文字的出现 信息可以被储存在文字中进行传播,...
在计算机程序设计时,把需要调用的函数存放于内存中,然后把用于函数调用指令的地址保存在堆栈,通过这种方式,在之后的程序设计时可以通过堆栈中的函数调用指令,从而完成函数的调用。 2.3 掌握C语言的自增和自减...