环境:vs2005 windows07 如果发现程序无法运行,需要安装vc插件,自行百度。
具体步骤如下
1.在网上获取dm.dll 然后还有大漠的.chm帮助文件
2.新建MFC对话框程序
3.添加MFC类
添加插件
这样我们就生成了一个类 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的坐标了,说明大漠插件成功了