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语言,这是一种广泛使用的计算机编程语言,由于它的高效性和灵活性,它在计算机科学和工程领域有着广泛的应用。要掌握C语言,除了学习其基础语法...
4. 函数:讲解了C语言中函数的定义、声明、调用机制以及函数的参数传递和返回值处理。 5. 数组和字符串:介绍了数组和字符串的定义、初始化、访问以及常用函数的使用,包括多维数组和字符串处理函数等。 6. 指针:...
- **当前的C**:现代C语言不仅在计算机科学领域占据着核心地位,也在嵌入式系统、游戏开发等领域发挥着重要作用。 #### 规范 - **K&R C**:这是早期的C语言版本,以其两位作者的名字命名(Kernighan & Ritchie)。 ...
此外,C语言在教学中的地位也十分稳固,是学习计算机科学不可或缺的基础。 总之,C语言作为一门经典的编程语言,其影响力横跨数十年。从发展历程来看,C语言不仅自身拥有强大的功能和良好的可移植性,而且为后来的...
1. **语法结构**:C语言的语法基于C++和Java等现代语言,包括变量声明、数据类型(如int、char、float)、控制流(if-else、for、while循环)、函数定义与调用等。 2. **指针**:C语言中的指针是其独特且强大的特性...
谭浩强教授是中国计算机科学教育的重要人物,他的《C语言程序设计》一书极大地推动了C语言在中国的普及。本上机实验题目集就是基于谭浩强教授的教学理念和方法,旨在帮助学习者通过实践加深对C语言的理解和运用。 ...
C语言是现代计算机科学中的基石之一,自诞生以来,它在软件开发领域占据了重要的位置。C语言最初是在20世纪70年代初,为了配合Unix操作系统的开发而创建的。本文将深入探讨C语言的起源、发展历程及其对计算机科学...
此外,C语言提供了丰富的函数库,这些函数可以方便地被调用,同时支持多种循环和条件语句,从而确保程序结构的清晰性和易于管理性。 3. **功能全面**:C语言支持多种数据类型,并且引入了指针的概念,这使得程序...
起初,C语言主要用于UNIX系统,但随着其优势逐渐显现,C语言在80年代开始应用于其他操作系统,并迅速普及到各种大小规模的计算机上,成为当代最优秀的程序设计语言之一。 #### C语言的特点 1. **结构化语言**:...
以下是一些关于C语言在科学与工程计算中应用的关键知识点: 1. **数值计算**:C语言支持各种数学运算,包括复数运算、矩阵运算和高精度计算。在科学计算中,经常需要实现特定的数值算法,如线性代数求解(如LU分解...
尽管可能存在一些错误,但谭浩强的书在中国普及了C语言,对于初学者来说是一本不错的入门教材。此外,周之英的《现代软件工程》也是一本深入的参考书。 学习C/C++并不是一蹴而就的过程,需要耐心和持久的努力。不要...
该书深入探讨了如何利用C语言构建高效、可靠的科学计算程序,旨在帮助程序员掌握C语言在解决实际科学问题中的应用。下面将详细阐述这本书中可能涉及的重要知识点。 1. **C语言基础**:C语言是计算机科学的基础,书...
C语言是一种基础的编程语言,它在计算机科学中占有重要地位,是许多高级语言的基础。了解并掌握C语言,对于理解计算机底层运作原理和提升编程技能至关重要。 1. **C语言概述** C语言是一种结构化编程语言,由贝尔...
本书全面覆盖了C语言的关键知识点,包括但不限于词法和词法规则、常量与变量、运算符与表达式、语句、函数与存储类、预处理功能、指针、结构、联合、枚举以及文件操作等。 书中的内容编排注重教学的实用性,强调...
4. 标准库函数:C语言标准库中提供了大量的函数,例如数学运算函数、字符串处理函数等,它们都在相应的头文件中声明。要使用这些函数,需要包含相应的头文件。 5. 语句的结束标志:C语言中的语句需要以分号(;)...
**谭浩强C语言第四版程序设计** C语言是一种强大的、通用的编程语言,由Dennis Ritchie在20世纪70年代初为UNIX操作系统开发。它的语法简洁且灵活,适用于系统编程、软件开发、游戏制作、嵌入式系统等多种领域。...
书中首先介绍了C语言的基本概念和历史背景,让读者了解C语言的发展过程和其在计算机科学中的重要地位。通过一个简单的C语言程序示例,引导初学者入门。同时,详细阐述了运行C程序的步骤,包括如何上机运行和调试程序...