dm.dll注册(大漠插件注册)

环境:vs2005 windows07 如果发现程序无法运行,需要安装vc插件,自行百度。

具体步骤如下

1.在网上获取dm.dll 然后还有大漠的.chm帮助文件


2.新建MFC对话框程序



3.添加MFC类


dm.dll注册(大漠插件注册)_第1张图片



添加插件






这样我们就生成了一个类 Cdmsoft 包装类



4.添加的代码如下:


    对话框初始化的代码

BOOL CtestDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// 此处为开始初始化的代码
	
	CString strExePath = GetExePath()+_T("\\dm.dll");
	char strBuff[256];

	CoInitialize(NULL);
	RegistryDll(strExePath);
	
	dm.CreateDispatch("dm.dmsoft");

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

对话框初始化需要用到的函数 ,获取exe路径

CString CtestDlg::GetExePath()
{
	char pathbuf[260];
	int  pathlen = ::GetModuleFileNameA(NULL,pathbuf,260);

	// 替换掉单杠
	while(TRUE)
	{
		if(pathbuf[pathlen--]=='\\')
			break;
	}
	pathbuf[++pathlen]=   0x0;
	CString  fname = pathbuf;
	return   fname;
}


注册dll,函数

BOOL RegistryDll(CString& szDllPath)   
{   

	LRESULT (CALLBACK* lpDllEntryPoint)();    
	HINSTANCE hLib =LoadLibrary(szDllPath);   
	if (hLib < (HINSTANCE)HINSTANCE_ERROR)  
	{
		//	AfxMessageBox(szDllPath);
		return FALSE;    
	}
	(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");    
	BOOL bRet = FALSE;   
	if (lpDllEntryPoint != NULL)   
	{   
		HRESULT hr = (*lpDllEntryPoint)();   
		bRet = SUCCEEDED(hr);   
		if (FAILED(hr))   
		{   
			AfxMessageBox("注册失败");
		}   
	}   
	FreeLibrary(hLib);   
	return bRet;   
} 

头文件


// testDlg.h : 头文件
//

#pragma once

#include "Cdmsoft.h"
// CtestDlg 对话框
class CtestDlg : public CDialog
{
// 构造
public:
	CtestDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	enum { IDD = IDD_TEST_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedCancel();
	CString GetExePath();
		Cdmsoft dm;
};


测试代码

void CtestDlg::OnBnClickedOk()
{

	dm.MoveTo(120,120);
}





void CtestDlg::OnBnClickedCancel()
{
	exit(0);
}


如果鼠标移动到了 120,120的坐标了,说明大漠插件成功了

你可能感兴趣的:(dm.dll注册(大漠插件注册))