标题:[讨论]我给一个作者写的邮件,恐无法得到回复,贴在这里希望大家都来讨论并 ...
取消只看楼主
youken
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-11-11
 问题点数:0 回复次数:0 
[讨论]我给一个作者写的邮件,恐无法得到回复,贴在这里希望大家都来讨论并指点我

邮件的原文如下:
××先生
您好,近期看了您写的关于VC编写DLL的文章,我觉得很受用。我目前正在做一个软件,用到了解线性方程组的算法,其中迭代算法是通用的,所以我也将其封装在了自己编写的静态的规则DLL中(因为考虑到要用MFC),在编写DLL过程中想到了两个问题,现提出来想请您指点:
首先,是关于DLL函数声明与导出的问题,DLL有两种导出方法,一种是通过“extern "C" renturn _declspec(dllexport) fun(para list)”的方式导出,一种是在.def文件中写导出函数的方式导出。我选择了第二种,因为可以少写一些代码(我比较懒吧),但是,为了考虑该DLL今后能被非C/C++的语言调用,我定义导出函数如下(导出函数名为A,定义成一个全局函数,且该函数未在.h文件中声明,直接在.cpp文件中声明并编写实现代码)
void _stdcall A(void) {code here};
然后在.def中添加A函数,我这么做是不是正确的做法呢?可以通用吗?
第二个问题就是关于DLL调用的问题了。由于DLL中编译了函数的实现,所以发布调用DLL的EXE程序时,必须连同DLL一起发布。这让我不禁想到了MFC,我理解MFC是以一系列的DLL发布的,VC在安装的时候,要更新系统,就是将这些DLL安装到system32目录下,所以我们看到在VC98目录下有很多头文件和库文件,调用MFC函数实际上就是隐式调用DLL,不知我这么理解是否正确,如果正确,那么,当一个程序编译好了发布的时候,我们知道用户是没有安装VC的,也就是说用户电脑上没有MFC的相关函数,可是编译的release版本照样可以在其它及其上运行并调用MFC的函数,不知这深层的机制是怎样的?还有,就是关于GDI+,它的绘图函数都包含在gdiplus.dll中,VC6的后续版本默认支持GDI+,因为它们包含了gdiplus.dll这个动态链接库,用VC 2005编写的GDI+程序似乎不需要一同发布gdiplus.dll这个动态链接库,但VC6要想支持GDI+就需要安装动态链接库并进行一番设置,而且这个程序最终发布后也要将gdiplus.dll一同发布,那么这两者发布的程序有什么不同呢?
以前写MFC程序没有考虑这么多,读了您的文章后才知道自己原来有这么多不清楚的地方,恳请您能指点迷津!万分感谢。

以上就是邮件内容,大家看后能否给我指点呢?

搜索更多相关主题的帖子: 邮件 DLL 作者 extern 
2007-11-12 08:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-185393-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.132957 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved