假设需求如下:底层是一个数学运算库DLL,中间是ActiveX控件(它调用底层的数学运算库DLL来完成控制层),界面层在测试时可以是一个exe程序,最后发布到IE浏览器上测试。
数学运算库DLL的开发
新建一个Win32 DLL项目,加入一个头文件MyNum.h,在其中声明所有的数学函数(为简单起见,本文只考虑加法运算),代码如下:
#ifndef MY_NUM_H
#define MY_NUM_H
int __stdcall AddNum(int,int);
#endif
请注意这里的方法声明为__stdcall,而VC++默认的是__cdecl,由于组件的语言无关性要求调用和被调双方必须在函数调用的约定上一致,因此在后面加载DLL并获取此方法时也要求和你的声明一致。
为了简单起见,加法方法的实现就放倒DLL入口点所在文件,代码如下:
// NumDLL.cpp : 定义DLL 应用程序的入口点。
//
#include "stdafx.h"
#include "MyNum.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
int __stdcall AddNum(int Num1,int Num2)
{
return Num1+Num2;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
为了能在其他程序中显示链接此DLL,我们为它加入一个.def文件,命名为NumDLL.def,列出此DLL导出的方法名称:
LIBRARY "NumDLL"
EXPORTS
AddNum
至此我们的数学运算函数库DLL就完成了。