新建项目设置环境添加命令代码设置设置启动演示视频参考例程
新建项目

运行Visual Studio,点击左上角【文件(F)】->【新建(N)】->【项目(P)】,VS将弹出如下对话框:


blob.png


我们选择上图中选中的(MFC DLL)模板,在【名称(N)】文本栏键入我们的项目名(Extended),点击确定。在后续弹出的对话框选择【下一步>】,出现如下所示图:


blob.png


我们选择【MFC 扩展DLL(E)】,单击【完成】。

设置环境

在VS的【解决方案资源管理器】中右键我们新建的项目,在弹出的对话框中我们选择【属性(R)】项。VS将弹出如下设置框:


blob.png


根据我们的需要设置相应的属性,在此实例中,我们使用的DEBUG配置,X86平台,读者应根据自己所需在对话框作出如下修改:


Release/64 Release/32 Debug/64 Debug/32
输出目录 控件\Bin\vc100x64 控件\Bin\vc100 控件\Bin\vc100x64d 控件\Bin\vc100d
目标文件名 $(ProjectName)52x64 $(ProjectName)52 $(ProjectName)52x64d $(ProjectName)52d


在【目标文件扩展名】栏我们修改为".mrx",而在【VC++目录】下我们需要作出如下修改:


blob.png


只需要修改【包含目录】和【库目录】,或者修改:

【包含目录】的设置应用到【C/C++】->【常规】下的【附加包含目录】

【库目录】的设置应用到【连接器】->【常规】下的【附加库目录】

前者于后者都是将控件下的头文件与lib文件引用到项目,而区别在于是否仅适用于当前工程。

添加命令

在【解决方案】下右键我们的【Extended】,选择【添加(D)】->【类(C)】->【C++类】,取名为“CommandTest”。

在“CommandTest”的头文件里定义如下:


  • #pragma once
    class CommandTest
    {
    
    public:
    
    	static void RegisterCommand();
    	static void UnRegisterCommand();
    
    private:
    
    	static void AddCommand();
    
    };


而CommandTest”的源文件里定义如下:


  • #include "StdAfx.h"
    #include "CommandTest.h"
    
    void CommandTest::RegisterCommand(){
    	acedRegCmds->addCommand(_T("CommandTest"), _T("AddCommand"),
    	_T("AddCommand"), ACRX_CMD_MODAL, AddCommand);
    }
    
    void CommandTest::UnRegisterCommand()
    {
    	acedRegCmds->removeGroup(_T("CommandTest"));
    }
    
    void CommandTest::AddCommand()
    {
    	
    }


在头文件里的RegisterCommand函数是将我们的自定义命令(此实例仅有一个AddCommand作为演示)添加到命令表中,而UnRegisterCommand则是注销命令。

代码设置

在代码预编译头文件(stdafx.h)中添加如下 控件\Src\MxDraw5.2\MxInc\MxDraw.h 头文件。


  • #include "..\..\MxDraw52\Src\MxDraw5.2\MxInc\mxdraw.h"


在dllmain.cpp中,我们将设置导出函数:

声明:


  • extern "C" _declspec(dllexport) McRx::AppRetCode mcrxEntryPoint( McRx::AppMsgCode msg, void* pkt);


实现:


  • extern "C" McRx::AppRetCode mcrxEntryPoint( McRx::AppMsgCode msg, void* pkt)
    {
    	switch( msg )
    	{
    	case McRx::kInitAppMsg:
    
    		mcrxDynamicLinker->unlockApplication(pkt);
    
    		initApp();
    
    		break;
    	case McRx::kUnloadAppMsg:
    
    		unloadApp(); 
    
    		break;
    	default:
    		break;
    	}
    	return McRx::kRetOK;
    }


并添加:


  • MC_IMPLEMENT_EXTENSION_MODULE(theMrxDLL);
    HINSTANCE _hdllInstance = NULL;


主函数内为:


  • DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    	// 如果使用 lpReserved,请将此移除
    	UNREFERENCED_PARAMETER(lpReserved);
    
    	if (dwReason == DLL_PROCESS_ATTACH)
    	{
    		TRACE0("Extended.DLL 正在初始化!\n");
    
    		_hdllInstance =  hInstance;
    		if(!theMrxDLL.AttachInstance(hInstance) )
    			return 0;
    
    	}
    	else if (dwReason == DLL_PROCESS_DETACH)
    	{
    		TRACE0("Extended.DLL 正在终止!\n");
    
    		theMrxDLL.DetachInstance();
    	}
    	return 1;   // 确定
    }


并添加我们的初始化与注销函数:


  • void initApp()
    {
    	CommandTest::RegisterCommand();
    }
    
    void unloadApp()
    {
    	CommandTest::UnRegisterCommand();
    }
设置启动

我们需要在调用此扩展程序的项目下添加如下代码:


  • Mx::mcrxLoadModule(_T("Extended"), false);


我们将使用我们控件里的演示程序【Edit.exe】进行添加扩展程序【Extended.mrx】;启动调试【Edit.exe】或者设置“Extended”项目下的【调试】->【命令】项为 控件\Bin\vc100d\Edit.exe。

演示视频

添加

参考例程

更多的实例代码在 控件\Src\MxDraw5.2\samples下可找到。 如MxEdit。

MxDraw
MxDraw是由梦想凯德基于AutoDesk CAD平台开发的软件,拥有完全自主的核心技术和知识产权。MxDraw致力于为各企业提供最优秀的CAD平台整体解决方案。
技术服务
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
产品购买
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
用户交流
QQ群1:827867134
QQ群2:827867134
QQ群3:827867134