LOGO
帮助文档
旧版文档
新建项目设置环境添加命令代码设置设置启动演示视频参考例程
新建项目

运行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/64Release/32Debug/64Debug/32
输出目录控件\Bin\vc100x64控件\Bin\vc100控件\Bin\vc100x64d控件\Bin\vc100d
目标文件名$(ProjectName)52x64$(ProjectName)52$(ProjectName)52x64d$(ProjectName)52d


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


blob.png



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

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

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

前者于后者都是将CAD控件下的头文件与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)中添加如下 CAD控件\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”项目下的【调试】->【命令】项为 CAD控件\Bin\vc100d\Edit.exe。

演示视频

添加

参考例程

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