注册 登录
编程论坛 VC++/MFC

老师给的程序看不懂求大神

yaoyaosu007 发布于 2015-04-12 12:59, 1538 次点击
// ArxMFC.cpp : Defines the initialization routines for the DLL.
//
 
#include "stdafx.h"
#include <afxdllx.h>
#include "ArxMFC.h"
#include "ArxMFCdlg.h"
#include "AcExtensionModule.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
extern "C" HWND adsw_acadMainWnd();
AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL);
 
void dialogCreate()
{
    ArxMFCdlg dlg(CWnd::FromHandle(adsw_acadMainWnd()));
    int nReturnValue=dlg.DoModal();
}
 
static void initApp()
{
    CAcModuleResourceOverride resOverride;
    acedRegCmds->addCommand(_T("ACUISAMPLE"),_T("arxmfc"),_T("arxmfc"),ACRX_CMD_MODAL,dialogCreate,NULL,-1,theArxDLL.ModuleResourceInstance());
}
 
void unloadApp()
{
    acedRegCmds->removeGroup(_T("ACUISAMPLE"));
}
 
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    UNREFERENCED_PARAMETER(lpReserved);
 
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        theArxDLL.AttachInstance(hInstance);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
        theArxDLL.DetachInstance();
    }
    return 1;
}
 
extern "C"
AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg,void* pkt)
{
    switch(msg)
    {
    case AcRx::kInitAppMsg:
        acrxDynamicLinker->unlockApplication(pkt);
        acrxDynamicLinker->registerAppMDIAware(pkt);
        initApp();
        break;
    case AcRx::kUnloadAppMsg:
        unloadApp();
        break;
    case AcRx::kInitDialogMsg:
        break;
    }
    return AcRx::kRetOK;
}
1 回复
#2
AleTiff2015-04-13 12:53
这是个 DLL 单元代码。

DLL:动态链接库,是提供给其他程序使用的函数库。

这个代码里,DllMain() 是这个单元的主函数。不过,DLL的主函数大多数没什么事情要做的,这个代码也不例外。

关键的代码都在 acrxEntryPoint() 函数里。仔细对照看一看,因为这只是一个片段代码,我只知道这个代码,首先利用函数
registerAppMDIAware(),注册了一个数据结构,然后调用 initApp() 函数添加了一个命令和一个回调函数 dialogCreate(),
这个回调函数会创建一个模态对话框。

就这么多。
1