VS2010,C++win32动态库项目示例
有些东西,接触的时间长了难免生疏,甚至是忘记。对于C++就是这样一种情况。写了long久的C#代码,回过头来要写一个C++动态库的小项目,才发现已经对C++的项目风格很生疏了。好在以前做过的东西,稍微接触一下仍旧会回复两分三分的感觉。
其实这个示例程序MSDN上就有(点这里),而且比较详细了。在文本方面,所以我就无聊到贴图而已,好吧我们开始贴图
新建动态库项目,选择Win32控制台应用程序。

点击确定,你会看到

然后你需要,把预编译头去掉,不选择。

完成之后就有了一个项目

接下来就让我们对这个项目进行修改,已达到我们期望的目的。获得一个可以生成dll的项目,首先在项目上右键选择属性,你需要进入配置属性>常规>配置类型,进行修改。
看到下面的图片你应该知道要把配置类型改为动态库(*.dll)

改完之后,就需要我们在这个里面增加些代码,让这个动态库看起来更像一个动态库。现在我们看一下新建的项目里有一个MatiDownloadDll.cpp但是缺少对应的.h头文件。所以我们需要添加一个对应的头文件,然后加入一些我们希望的代码。
所以,你需要在项目上右键>添加>新建项,在弹出的对话框中选择.h头文件

填写好名称之后,点添加就ok了。
你看到了我们的.h文件竟然是这样子的

对的,是空白的,所以然后增加代码,记得图中标红的代码是需要特别注意的。
__declspec(dllexport)是让 DLL 能够导出该方法以供其他应用程序使用的关键所在。否则...

.h头文件里的代码我们是摆平了,接下来就是在cpp文件中添加实现了。vs初始化的项目里,这个cpp文件中有如下代码。这个时候我脑海里响起了一句广告词:“Don't afraid, just do it!”
我
我们添加的代码,然后编译吧,的确是成功了。哈哈

我是华丽丽的分割线,接下来需要考验一下你的耐心。所以,请坚持住啊
为了测试我们的动态库项目,于是我打算新建一个项目来测试一下。当然MFC窗体程序总显的那么高级一点
在解决方案上右键,添加>新建项目,选择MFC>MFC应用程序

点确定以后你会看到一个MFC向导

点下一步,为了更简单,我们选择但对话框窗体和使用静态MFC链接库

点下一步

点下一步

点下一步

终于可以点完成了。点完成。于是我们又多了一个项目

接下来添加对我们的动态库的引用。在这个项目上右键>引用

点添加新引用

看到了吧,点确定。然后我们需要添加几个变量设置。首先是告诉编译器MatiDownloadDll.hl在哪里,没错刚才的引用不知道它做了什么,你还需要手动添加一下。
在配置属性>C/C++>常规>附加包含目录 下拉菜单展开后点那个编辑

点那个新建文件夹的图标

看,新出现一个空项,点左侧的浏览按钮

我找到了MatiDownloadDll.h所在的目录,你找到了嘛?

然后点选择文件夹>确定就可以回到属性卡了。然后我们还需要高速编译器MatiDownloadDll.dll在哪里。额,这都是什么情况。貌似我们刚才选择引用dll没有什么必要吗?
在配置属性>调试>环境 点击编辑啊

似曾相识的一个窗口

在这里你需要输入MatiDownloadDll.dll的路径。这一次没有浏览目录让我点了了,回想一下刚才点按个浏览按钮打开的是当前项目的Debug,当前项目是MatiDownloadApp,所以如果我想设置目录为MatiDownloadDll.dll所在目录的话(因为MatiDownloadDll.dll文件在这解决方案下的Debug目录下)格式是PATH=< dll 文件的路径>
所以这个值应该是 PATH=<../../Debug/MatiDownloadDll.dll>

点确定,点确定关闭属性选项卡。打开MatiDownloadApp项目里的MatiDownloadAppDlg.cpp文件。

在#include "afxdialogex.h"下添加#include “MatiDownloadDll.h”。

然后向下滚动到BOOL CMatiDownloadAppDlg::OnInitDialog() 这个函数处,添加代码
MatiDownloadDll::MatiDownloadCore core; char* str = core.GetName();

编译成功,加断点调试:You Called GetName Function Successfully!

贡献2010项目一枚下载 http://www.itivy.com/DownloadFile.ashx?id=634454953232042953
方向之于生命
回复 2011-8-18 23:38:10 by ivy
回复 2011-8-20 9:41:07 by klvoek
回复 2011-8-20 14:34:03 by ivy
@klvoek:貌似用飞信自带的.net虚拟机可以解决,去博客园搜索“飞信 .net”,不过可能是精简过了的
回复 2011-8-22 0:28:14 by klvoek