VS2010中C#调用C函数

VS2010中C#调用C函数

(2013-07-22 16:12:50)
转载
  分类: C_Concept

1. 创建C本地DLL文件

1.1 创建Win32Dll项目

1.2 创建DLL,点击完成


1.3 在“头文件”里新建文件:CPPLibraryTest.h

 在CPPLibraryTest.h中输入以下内容:

[cpp]   view plain copy print ?
  1. extern "C" __declspec(dllexportvoid Method1();  
1.4 在源文件里新建文件:CPPLibraryTest.cpp

 

并输入:

 

[cpp]   view plain copy print ?
  1. #include "stdafx.h"  
  2. #include   
  3. #include "CPPLibraryTest.h"  
  4.   
  5. void Method1()  
  6. {  
  7.     int *p = NULL;  
  8.     *p = 1;//异常情形  
  9. }  

1.5 新建模块定义文件:CPPLibraryTest.def

并输入:

 

[cpp]   view plain copy print ?
  1. LIBRARY CPPLibraryTest  
  2. EXPORTS Method1  

 

LIBRARY是模块定义文件必须的一部分,它告诉链接器(linker)如何命名你的DLL。EXPORTS也是模块定义文件必须的一部分,这部分使得该函数可以被其它应用程序访问到并且它创建一个导入库。当你生成这个项目时,不仅是一个.dll文件被创建,而且一个文件扩展名为.lib的导出库也会被创建。EXPORTS后面列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用)。

1.6 编译并生成文件:CPPLibraryTest.dll

1.7 新建C#控制台应用程序

1.8 program.cs 文件内容

 

DllImport("User32.dll", CharSet = CharSet.Auto)]

[csharp]   view plain copy print ?
  1. class Test  
  2. {  
  3.     [DllImport("CPPLibraryTest.dll")]  
  4.     private extern static void Method1();  
  5.   
  6.     static void Main(string[] args)  
  7.     {  
  8.         try  
  9.         {  
  10.             Method1();  
  11.         }  
  12.         catch (Exception err)  
  13.         {  
  14.             Console.WriteLine("捕获异常:{0}", err.ToString());  
  15.         }  
  16.         finally  
  17.         {  
  18.             Console.WriteLine("执行 finally");  
  19.         }  
  20.   
  21.         Console.ReadLine();  
  22.     }  
  23. }  

1.9 将CPPLibraryTest.dll拷贝到ConsoleTest的Debug文件夹下,生成运行即可。

 

2.0 运行结果:

你可能感兴趣的:(C#代码)