1. 创建C本地DLL文件
1.1 创建Win32Dll项目
1.2 创建DLL,点击完成
1.3 在“头文件”里新建文件:CPPLibraryTest.h
在CPPLibraryTest.h中输入以下内容:
extern "C" __declspec(dllexport) void Method1();
1.4 在源文件里新建文件:CPPLibraryTest.cpp
并输入:
#include "stdafx.h"
#include <iostream>
#include "CPPLibraryTest.h"
void Method1()
{
int *p = NULL;
*p = 1;//异常情形
}
1.5 新建模块定义文件:CPPLibraryTest.def
并输入:
LIBRARY CPPLibraryTest
EXPORTS Method1
LIBRARY是模块定义文件必须的一部分,它告诉链接器(linker)如何命名你的DLL。EXPORTS也是模块定义文件必须的一部分,这部分使得该函数可以被其它应用程序访问到并且它创建一个导入库。当你生成这个项目时,不仅是一个.dll文件被创建,而且一个文件扩展名为.lib的导出库也会被创建。EXPORTS后面列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用)。
1.6 编译并生成文件:CPPLibraryTest.dll
1.7 新建C#控制台应用程序
1.8 program.cs 文件内容
class Test
{
[DllImport("CPPLibraryTest.dll")]
private extern static void Method1();
static void Main(string[] args)
{
try
{
Method1();
}
catch (Exception err)
{
Console.WriteLine("捕获异常:{0}", err.ToString());
}
finally
{
Console.WriteLine("执行 finally");
}
Console.ReadLine();
}
}
1.9 将CPPLibraryTest.dll拷贝到ConsoleTest的Debug文件夹下,生成运行即可。
2.0 运行结果:
由此可见:
1、本文演示了如何由C#调用VS2010下的本地C++资源;
2、异常机制,在上述调用本地资源出现异常的情况下会出现try出现异常之后既没有进入catch也没有运行finally.