`

[科普小短文]在C#中调用C语言函数 (Linux & Mono版) 转

 
阅读更多

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平台的代码是一致的:

  1. int  sum( int  a,  int  b)    
  2. {    
  3.     return  a + b;    
  4. }  


我们用gcc来把它编译成动态链接库 libtest.so

  1. gcc -c -Wall -Werror -fpic Test.c  
  2. gcc -shared -o libtest.so Test.o  


这样我们就得到了 libtest.so 这个动态链接库。

无图无真相,我们看一下截图:

 

二、在C#中通过P/Invoke调用Test.dll中的sum()方法

我们用 vi 来编写一个简单的C#程序:Invoke.cs

这个C#程序除去注释、除去namespace定义、引用之外,只有6行代码:

[csharp] view plain copy print ?
  1. // -----------------------------------------------------------------------     
  2. // <copyright file="Invoke.cs" company="Yaping Xin">     
  3. // P/Invoke example.     
  4. // </copyright>     
  5. // -----------------------------------------------------------------------   
  6. namespace  Invoke    
  7. {    
  8.     using  System;    
  9.     using  System.Runtime.InteropServices;    
  10.     
  11.     /// <summary>     
  12.     /// .Net P/Invoke example.     
  13.     /// </summary>     
  14.     internal   class  Program    
  15.     {    
  16.         /// <summary>     
  17.         /// Entry point of the application.     
  18.         /// </summary>     
  19.         /// <param name="args">Console arguments.</param>     
  20.         internal   static   void  Main( string [] args)    
  21.         {    
  22.             int  result = Sum(2, 3);    
  23.             Console.WriteLine("Shared library func execute result: {0}" , result);    
  24.         }    
  25.     
  26.         /// <summary>     
  27.         /// Call method int sum(int, int) defined in Test.dll     
  28.         /// </summary>     
  29.         /// <param name="a">parameter a</param>     
  30.         /// <param name="b">parameter b</param>     
  31.         /// <returns>sum of a and b</returns>     
  32.         [DllImport("libtest.so" , EntryPoint =  "sum" )]    
  33.         private   static   extern   int  Sum( int  a,  int  b);    
  34.     }    
  35. }  

 

在命令行下编译该C#源文件:

  1. gmcs Invoke.cs  


这样就编译出了一个基于mono的可执行文件 Invoke.exe

 

 

三、执行

我们把 libtest.so 拷贝到 /lib 目录下,以便我们的程序能找到它。为什么放到这个目录下呢?这是根据Linux操作系统搜寻动态链接库的规则来做的,对此问题如果希望详细解释的话,请阅读有关Linux系统的文档、手册。

执行我们的C#代码编译得到的可执行文件:

  1. mono Invoke.exe  


得到了和《[科普小短文]在C#中调用C语言函数 》一文中一样的执行结果:

  1. Shared library func execute result: 5  

无图无真相,我们再来一张截图:

 

 

相关链接:

分享到:
评论

相关推荐

    C语言函数练习题2.pdf

    随着编程技术的普及和学习难度的降低,越来越多的编程初学者开始接触C语言,这是一种广泛使用的计算机编程语言,由于它的高效性和灵活性,它在计算机科学和工程领域有着广泛的应用。要掌握C语言,除了学习其基础语法...

    C语言设计 第四版

    4. 函数:讲解了C语言中函数的定义、声明、调用机制以及函数的参数传递和返回值处理。 5. 数组和字符串:介绍了数组和字符串的定义、初始化、访问以及常用函数的使用,包括多维数组和字符串处理函数等。 6. 指针:...

    日文版C语言入门资料

    - **当前的C**:现代C语言不仅在计算机科学领域占据着核心地位,也在嵌入式系统、游戏开发等领域发挥着重要作用。 #### 规范 - **K&R C**:这是早期的C语言版本,以其两位作者的名字命名(Kernighan & Ritchie)。 ...

    c语言概论(讲述的是C语言的发展历程、特点以及将来发展)

    此外,C语言在教学中的地位也十分稳固,是学习计算机科学不可或缺的基础。 总之,C语言作为一门经典的编程语言,其影响力横跨数十年。从发展历程来看,C语言不仅自身拥有强大的功能和良好的可移植性,而且为后来的...

    C语言写的世界程序大赛获奖作品

    1. **语法结构**:C语言的语法基于C++和Java等现代语言,包括变量声明、数据类型(如int、char、float)、控制流(if-else、for、while循环)、函数定义与调用等。 2. **指针**:C语言中的指针是其独特且强大的特性...

    C语言上机实验题目(谭浩强版)

    谭浩强教授是中国计算机科学教育的重要人物,他的《C语言程序设计》一书极大地推动了C语言在中国的普及。本上机实验题目集就是基于谭浩强教授的教学理念和方法,旨在帮助学习者通过实践加深对C语言的理解和运用。 ...

    C语言的发展史

    C语言是现代计算机科学中的基石之一,自诞生以来,它在软件开发领域占据了重要的位置。C语言最初是在20世纪70年代初,为了配合Unix操作系统的开发而创建的。本文将深入探讨C语言的起源、发展历程及其对计算机科学...

    c语言入门教材.txt

    此外,C语言提供了丰富的函数库,这些函数可以方便地被调用,同时支持多种循环和条件语句,从而确保程序结构的清晰性和易于管理性。 3. **功能全面**:C语言支持多种数据类型,并且引入了指针的概念,这使得程序...

    c语言基本指令

    起初,C语言主要用于UNIX系统,但随着其优势逐渐显现,C语言在80年代开始应用于其他操作系统,并迅速普及到各种大小规模的计算机上,成为当代最优秀的程序设计语言之一。 #### C语言的特点 1. **结构化语言**:...

    C语言科学与工程程序集

    以下是一些关于C语言在科学与工程计算中应用的关键知识点: 1. **数值计算**:C语言支持各种数学运算,包括复数运算、矩阵运算和高精度计算。在科学计算中,经常需要实现特定的数值算法,如线性代数求解(如LU分解...

    C语言编程思想总结

    尽管可能存在一些错误,但谭浩强的书在中国普及了C语言,对于初学者来说是一本不错的入门教材。此外,周之英的《现代软件工程》也是一本深入的参考书。 学习C/C++并不是一蹴而就的过程,需要耐心和持久的努力。不要...

    C语言科学与工程程序库_pdf.rar

    该书深入探讨了如何利用C语言构建高效、可靠的科学计算程序,旨在帮助程序员掌握C语言在解决实际科学问题中的应用。下面将详细阐述这本书中可能涉及的重要知识点。 1. **C语言基础**:C语言是计算机科学的基础,书...

    谭浩强c语言.rar

    C语言是一种基础的编程语言,它在计算机科学中占有重要地位,是许多高级语言的基础。了解并掌握C语言,对于理解计算机底层运作原理和提升编程技能至关重要。 1. **C语言概述** C语言是一种结构化编程语言,由贝尔...

    C语言基础教程(修订版)

    本书全面覆盖了C语言的关键知识点,包括但不限于词法和词法规则、常量与变量、运算符与表达式、语句、函数与存储类、预处理功能、指针、结构、联合、枚举以及文件操作等。 书中的内容编排注重教学的实用性,强调...

    信息学奥赛培训及C语言的基本结构.pdf

    4. 标准库函数:C语言标准库中提供了大量的函数,例如数学运算函数、字符串处理函数等,它们都在相应的头文件中声明。要使用这些函数,需要包含相应的头文件。 5. 语句的结束标志:C语言中的语句需要以分号(;)...

    谭浩强C语言第四版程序设计

    **谭浩强C语言第四版程序设计** C语言是一种强大的、通用的编程语言,由Dennis Ritchie在20世纪70年代初为UNIX操作系统开发。它的语法简洁且灵活,适用于系统编程、软件开发、游戏制作、嵌入式系统等多种领域。...

    C语言程序设计第2版.pptx

    书中首先介绍了C语言的基本概念和历史背景,让读者了解C语言的发展过程和其在计算机科学中的重要地位。通过一个简单的C语言程序示例,引导初学者入门。同时,详细阐述了运行C程序的步骤,包括如何上机运行和调试程序...

Global site tag (gtag.js) - Google Analytics