1. VS2005建立和调试基于C++的DLL项目
File->New->project->Win32.选择Win32 Console Application, 如图示
然后点击“确定”,再到后面的向导中进行设置
“应用程序类型”选择“DLL”,点击Fnish,那么VS2005就自动创建了一个基于C++的DLL模板了。
生成项目,然后在对应的目录下面看到相应的DLL文件了,但是此时里面还没有任何功能,用户需要根据实际需求为DLL编写导出函数,然后供其它应用执行程序调用。
例子:补充下面代码,提供一个导出函数
__declspec(dllexport) int Add(int i, int j);
intAdd(int i, intj)
{
return i+j;
}
编译,确保在debug 目录下生成了dll.dll, 及dll.lib 文件
在dll 工作空间中新建一个工程叫TestDll.添加如下代码
intAdd(int i, intj); // 外部dll函数的调用声明
int_tmain(int argc, _TCHAR* argv[])
{
int sum=Add(3,5);
printf("sum is %d",sum);
return 0;
}
编译会出现:1>testdll.obj: error LNK2019: unresolved external symbol "int __cdeclAdd(int,int)" (?Add@@YAHHH@Z) referenced in function _wmain
这很正常,因为链接器不知道Add(int I, int j) 到哪里去找, 解决办法,添加dll.lib 到链接库,方法如下:Properties->Configuration Properties->linker->input->additionalDependences. 添加dll.lib, 如图示:
再编译,出现如下错误。
1>LINK : fatal error LNK1104: cannotopen file 'dll.lib'
找不到dll.lib, 因为你还没有指定查找路径。好,现在添加库查找路径。
方法如下:Properties->Configuration Properties->linker->general->additionallibray directory. 添加..\debug, (因为dll.dll 就在..\debug 目录下)如图示:
编译,通过。单步运行。可以跟踪到dll 的 int add(int I, int j) 函数中去。
补充: DLL 函数的调用还可以采用动态加载DLL 的方式,具体为LoadLibrary, GetProcAddress., 这里不再举例。
OK! 结束!
靠,发现不能实现图文混排,效果失色不少。