📄 关于vc中的dll的编程.htm
字号:
#include "stdafx.h"<br>
#include "MyRegularDll.h"<br>
// Note!<br>
<br>
// If this DLL is dynamically linked against the MFC DLLs, any functions exported from this DLL which call <br>
//into MFC must have the AFX_MANAGE_STATE macro added at the very beginning of the function.<br>
//<br>
// For example:<br>
//<br>
// extern "C" BOOL PASCAL EXPORT ExportedFunction()<br>
// {<br>
// AFX_MANAGE_STATE(AfxGetStaticModuleState());<br>
// normal function body here<br>
// }<br>
//<br>
// It is very important that this macro appear in each function, prior to any calls into MFC. This means <br>
//that it must appear as the first statement within the function, even before any object variable <br>
//declarations as their constructors may generate calls into the MFC DLL.<br>
<br>
BEGIN_MESSAGE_MAP(CMyRegularDllApp, CWinApp)<br>
//{{AFX_MSG_MAP(CMyRegularDllApp)<br>
// NOTE - the ClassWizard will add<br>
// and remove mapping macros here.<br>
// DO NOT EDIT what you see in these blocks<br>
END_MESSAGE_MAP()<br>
<br>
////////////////////////////////////////////////////////////<br>
// CMyRegularDllApp construction<br>
CMyRegularDllApp::CMyRegularDllApp()<br>
{<br>
// TODO: add construction code here,<br>
// Place all significant initialization in InitInstance<br>
}<br>
<br>
</span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:
Tahoma;mso-bidi-font-family:Tahoma'>以上是</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>AppWizard</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>产生的含有主要代码的两个文件,各位可从中看出和</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Non-MFC Dlls</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的区别。但要注意上面的</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>AppWizard</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>的提醒啊。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
<br>
[4]<br>
<br>
</span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:
Tahoma;mso-bidi-font-family:Tahoma'>这次要讲的是最后一种动态连接库:</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Extension Dlls.</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>再次说明,</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Extension Dll</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>只被用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>类库所编写的应用程序所调用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>.</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>在这种动态连接库中,你可以从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>继承你所想要的、更适于你自己用的类,并把它提供给你的应用程序。你也可随意的给你的应用程序提供</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>或</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>MFC</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>继承类的对象指针。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
Extension DLLs </span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>和</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Regular DLLs</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>不一样,它没有一个从</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CWinApp</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>继承而来的类的对象,所以,你必须为自己</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DllMain</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数添加初始化代码和结束代码</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>.</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>如下</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>:<br>
<br>
#include "stdafx.h"<br>
#include <br>
<br>
static AFX_EXTENSION_MODULE PROJNAMEDLL = { NULL, NULL };<br>
<br>
extern "C" int APIENTRY<br>
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)<br>
{<br>
if (dwReason == DLL_PROCESS_ATTACH)<br>
{<br>
TRACE0("PROJNAME.DLL Initializing!\n");<br>
<br>
// Extension DLL one-time initialization<br>
AfxInitExtensionModule(PROJNAMEDLL,hInstance);<br>
<br>
// Insert this DLL into the resource chain<br>
new CDynLinkLibrary(Dll3DLL);<br>
}<br>
<br>
else if (dwReason == DLL_PROCESS_DETACH)<br>
{<br>
TRACE0("PROJNAME.DLL Terminating!\n");<br>
}<br>
return 1; // ok<br>
}<br>
<br>
</span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:
Tahoma;mso-bidi-font-family:Tahoma'>在上面代码中</span><span lang=EN-US
style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>AfxInitExtensionMoudle</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>函数捕捉此动态库模块用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>.</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>在初始化的时</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>NEW</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>一个</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CDynLinkLibrary</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>对象的目的在于:它能是</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>Extension DLL</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>想应用程序输出</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>CRuntimeClass</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>对象或资源</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>.</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>如果此动态连接库被显式的调用,还必须在</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>DLL_PROCESS_DETACH</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>选择项的执行代码上调用</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'>AfxTermEXtensonModule</span><span
style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>,这保证了当调</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
</span><span style='mso-bidi-font-size:10.5pt;font-family:宋体;mso-ascii-font-family:
Tahoma;mso-hansi-font-family:Tahoma;mso-bidi-font-family:Tahoma'>用进程与动态连接库分离是正确清理内存中的动态库模块。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'><br>
<br>
</span><span style='mso-bidi-font-size:
10.5pt;font-family:宋体;mso-ascii-font-family:Tahoma;mso-hansi-font-family:
Tahoma;mso-bidi-font-family:Tahoma'>如果是隐式的被调用,则此步不是必须的了。</span><span
lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:Tahoma'> <span
style='color:#CCCCCC'><o:p></o:p></span></span></p>
</td>
</tr>
</table>
<p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -