(二) 动态装载、调用 DLL 中的非托管函数
在上面已经说明了如何用 ." 调用 中的非托管函数,但是这个是全局的函数,假若
中的非托管函数有一个静态变量 1,每次调用这个函数的时候,静态变量 1 就自动加 )。结果,
当需要重新计数时,就不能得出想要的结果。下面将用例子说明:
1. DLL 的创建
1) 启动 3A-;
2) 新建一个“$B 工程,工程名称为“"3;
3) 在“选择界面中选择“9.."C;
4) 打开 "3-..,添加如下代码:
// 导出函数,使用“ _stdcall ” 标准调用
extern "C" _declspec(dllexport)int _stdcall count(int init);
int _stdcall count(int init)
{//count 函数,使用参数 init 初始化静态的整形变量 S ,并使 S 自加 1 后返回该值
static int S=init;
S++;
return S;
}
5) 按“>D进行编译,得到 "3-(在工程目录下的 38 文件夹中)。
2. 用 DllImport 调用 DLL 中的 count 函数
1) 打开项目“<= ,向“>")窗体中添加一个按钮。
2) 改变按钮的属性:; 为“,<0 为“用 ." 调用 中 "3 函数”,并将
按钮 ) 调整到适当大小,移到适当位置。
3) 打开“>").代码视图,使用关键字和0声明方法“"3,并使其具
有来自"3-的导出函数 "3 的实现,代码如下:
[DllImport("Count.dll")]
static extern int count(int init);
4) 在“>").[设计]”视图中双击按钮 ,在“@方法体内添加如下代码:
MessageBox.Show(" 用 DllImport 调用 DLL 中的 count 函数, /n 传入的实参为 0 ,得到的结果是:"+count(0).ToString()," 挑战杯");
MessageBox.Show(" 用 DllImport 调用 DLL 中的 count 函数, /n 传入的实参为 10 ,得到的结果是: "+count(10).ToString()+"/n 结果
可不是想要的 11 哦!!! "," 挑战杯 ");
MessageBox.Show(" 所得结果表明: /n 用 DllImport 调用 DLL 中的非托管 /n 函数是全局的、静态的函数!!! "," 挑战杯 ");
5) 把 "3- 复制到项目“<= 的 E 38 文件夹中,按“>?运行该程序,并点击按钮 ,
便弹出如下三个提示框: