c语言调用动态库

核心提示引子动态链接库DLL文件不仅可以实现代码、资源和数据的共享,同时也可以对源代码起保护作用,对于开发者来讲,DLL的生成及调试是程序员必须掌握的一种技术,下面通过一个具体的例子,演示使用C/C++语言生成及调用DLL文件的方法。这儿开发工具选

介绍

动态链接库的DLL文件不仅可以实现代码、资源和数据的共享,还可以保护源代码。对于开发者来说,DLL的生成和调试是程序员必须掌握的技术。这里通过一个具体的例子,演示用C/C++语言生成和调用DLL文件的方法。这里的开发工具是一个小巧、精致、快速启动、经典的VC6.0环境,开发后的目录结构如下图所示:

从目录结构可以看出,这个例子在“E”盘上的文件夹“mydlcode”下创建了一个working room空“mydllcode . dsw”。working room 空包含两项,分别对应于文件夹“MyDllSrc”和“MyDllTest”,前者是一个动态库。

下面详细介绍了创建和调试动态库的过程。

创建workshop 空和项目

在VC6.0中,选择菜单“文件”->“新建...”,在弹出的对话框中切换到“工作区”选项页面,依次填写工作区空的名称和位置信息,如下图所示:

工作区创建后,在VC6.0左侧控制面板的FileView中,当前工作区名称为“MyDllCode”,包含的项数为0。右键单击工作区并选择“向工作区添加新项目空...”在弹出的右键菜单中,如下图所示:

在弹出的新建项目对话框中,选择项目类型为Win32动态链接库,项目名称为MyDllSrc。记得勾选“添加到当前工作空”并设置如下图所示:

在弹出的动态库配置对话框中,选择动态库类型为“one 空 DLL项目”,如下图所示,这样就完成了动态库源代码项目的创建。

在同一步骤中,您可以在workshop 空中创建空的测试代码项目。与动态库源代码项目不同的是,项目类型是Win32控制台应用程序的控制台程序,项目名称是MyDllTest。

work 空之间的项目创建后,会显示在VC6.0左侧控制面板的“文件视图”中,如下图所示。此时有两个项目,都是空项目,没有任何源代码文件:

设置项目输出目录。

此示例包括动态库源代码项目和测试代码项目。为了调试方便,将两个项目的输出文件目录设置在同一个目录下,比如工作空室中与“MyDllCode.dsw”同一个目录,避免了手动将动态库dll文件复制到exe所在目录的麻烦。对于调试模式,在VC6.0中选择菜单项目->设置或者直接按Alt+F7快捷键,在弹出的项目对话框中选择项目MyDllSrc,在右边的连接标签页中修改输出文件名,由原来默认的Debug/MyDllSrc.dll改为../.以同样的方式,将项目“MyDllTest”文件的输出目录修改为“../Debug/MyDllTest.exe "如下图所示:

对于“Release”模式,与上面完全相同,项目“MyDllSrc”和“MyDllTest”的文件输出目录修改为“../Release/MyDll.dll "和"../Release/MyDllTest.exe "。

编写动态库项目源代码文件。

创建一个新的头文件" MyDll.h ",选择菜单"文件"→"新建..."在VC6.0中,并在弹出的新建文件对话框中进行如下图所示的设置。记得勾选“添加到项目”为“MyDllSrc”。

在新创建的“MyDll.h”文件中,代码如下:

同样,使用以下代码创建一个新的C++源文件“MyDll.cpp ”:

在动态库工程中,定义并导出了一个函数“MyFunc ”,它产生等间隔的数据向量,并返回数据向量的最后值和状态信息。宏“EXPORT”在头文件中定义为“extern”C“_ _ declspec”,意味着这个函数的调用约定是“C”,在其他编程语言中调用这个函数时,调用约定必须一致。编译后,您可以在目录“E:MyDllCodeDebug”中获得动态库文件“MyDll.dll”。

编写测试项目的源代码文件。

类似于写动态库源代码文件,新建一个测试代码C++源文件“main.cpp”,记得勾选“添加到项目”为“MyDllTest”。代码如下:

在代码中,动态库的头文件由“# include”引入../mydlsrc/mydll.h ",lib文件由#pragma宏引入。请注意,必须正确设置路径。编译后可以在目录“E:MyDllCodeDebug”下得到可执行程序“MyDllTest.exe”文件,运行结果如下:

可以看出在调试代码工程中已经正确调用了“MyFunc”函数。

结论

上面给出了在VC6.0中创建和调试动态库的全过程。在VS2008和VS2010等其他ide中,配置过程类似。另外需要注意的是,由于本例将动态库项目和调试项目放在同一个工作室空,所以在单步调试中,如果在调用函数的行中设置了断点,则不需要额外设置,它会自动进入动态库项目的源代码“MyDll.cpp”中观察“MyFunc”函数的执行情况。

欢迎关注,一起交流。

 
友情链接
鄂ICP备19019357号-22