VC++ 使用大漠DLL笔记

1.绑定窗口时的类型转换
	int away;
	HWND wnd;
	CString fifteen;
	long Di;

	wnd=::FindWindow(L"Notepad",NULL);

	fifteen.Format(L"%d",wnd);//HWND转CString
		
	Di=_tstol((LPCTSTR)fifteen);  //CString转long

	away=dm.BindWindow(Di,L"normal",L"normal",L"normal",0);

	TRACE(L" 记事本还开着 ");

窗口句柄处的数据类型是Long用FindWindow()API函数获取的窗口句柄是HWND类型,目前能想到的方法就是把HWND类型先转换成CString类型,再把CString类型转为long型。


2.字符串类型选择问题

在MFC工程下字符串类型最好选择CString或者C++的string。此二者相互转换起来比较方便。在想使用string类型需要先导入头文件:

#include <string>

然后可以

using namespace std;

一次性把命名空间中的内容全部导出,这有违命名空间设立的初衷,容易导致混淆,特别是把这句话放入.h头文件后,如果其他.cpp文件也引用此.h文件会出现命名冲突。安全的方法是声明类型时:

std::string pBuff; 

这样就声明了一个string类型。

然后用string类型声明一个二维数组用于A星算法作为二维地图

	     std::string pBuff[11][7] ={  
			 {"0","*","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},
			 {"0","0","0","0","0","0","0"},

	}; 

然后是string与CString类型之间的转换问题。

string转CString:

CString mistakes;

mistakes=pBuff[0][1].c_str();  //string转CString


CString转string:

CString husband=L"ffaa33";

string action=( CW2A( husband.GetString() ) );


3.怎么判断2个数相除有没有余数

  int nub=6;
  int nub2=2;
  //%取余运算符,如果相除能整除余数为0,不为0就是有余数

   if (nub % nub2==0)
  {
  MessageBox(L"没有余数");
  }
  else
  {
  MessageBox(L"有余数");
  }

4. 多线程问题


使用COM组件时,通常的做法是在main函数的最前面调用CoInitialize(NULL);,最后面调用CoUninitialize();也就是说:COM的初始化是以线程为单位的。


首先大漠的DLL是COM组件,COM组件使用前须用CoInitialize(NULL); API函数声明一下,此声明是以线程为单位的,也就是说主线程声明了也只是在主线程起作用,如果想在子线程中继续使用COM组件,则需要再用CoInitialize(NULL)以及其后配套API再声明一次。


以下是一个线程的回调函数:

UINT CNeverDlg::Thread1(void *param) //线程1
{
	//子线程调用大漠
	

	Cdmsoft things; //声明一个新的大漠对象
	CoInitialize(NULL);

	CLSID well;
	HRESULT wait=CLSIDFromProgID(OLESTR("dm.dmsoft"),&well);
	things.CreateDispatch(well);

	things.MoveTo(300,400);


	CoUninitialize();

	return 0; //因为回调函数的类型为UINT而不是void所以需要返回0

}



5.怎么按长度取出字符串

string action,time;

action="ffaa33";

time=action.substr(0,2); //从第0个字开始取2个字放入time变量

//此时time里的数值就是字符串"ff"


6.怎么把字符串转为int

CString forg;
int nValude = 0;
string action,time,family,pass;
action="ffaa33";
family="0x";
time=action.substr(0,2); //从第0个字开始取2个字放入time变量
pass=family+time; //把两个string字符串合起来,此时pass中的值就是:"0xff"
nValude = stoi(pass,nullptr,0); //把string字符串转int,此时nValude变量中存储的就是数字255了
forg.Format(_T("%d"),nValude); //参数1改成%x就会以16进制形式显示
OutputDebugStringW(forg);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值