1,Win2000下动态加载DLL时遇到一个奇怪的问题,
CString sdkPath
=
_T(
"
C:\\WINDOWS\\system32
"
);
::SetCurrentDirectory(sdkPath);
handle
=
::LoadLibrary(_T(
"
C:\\WINDOWS\\system32\\termb.dll
"
));
if
(handle
==
NULL)
{
DWORD e
=
GetLastError();
return
false
;
}
这样一段代码居然加载dll不成功,报错127,将其改为从相对路径下进行加载又成功了,可是有的资料上说在Win2000下动态加载DLL时应该指明DLL的完整路径才行.
2,在VS2005中开发的ActiveX控件在另一台没有开发环境的XP下无法运行,会报错”由于应用程序配置不正确,应用程序未能启动,重新安装应用程序可能可以解决这个问题”.这是由于VS2005默认的MFC是使用动态的MFC程序库(Use MFC in a Shared DLL)来链接的,而动态的 MFC程序库是Muti-threaded DLL(/MD),由于WinXP对于文件的监控比较严格,因此导致部分使用多线程的DLL执行时发生错误.
解决方法: 修改编译时的属性设定,在Project ->Property ->configuration Properties ->C/C++ -> Code Generation ->Runtime Libary 修改成Multi-threaded(/MT),修改了Runtime之后,將MFC编译类型更改成静态程序库,Project ->Property ->Configuration Properties ->Use of MFC修改成Use MFC in a Static Library.
3,图片的融合以及文字的输出(使用CxImage库).
void
CScanDlg::ShowImage(CString
&
srcImgPath,CString
&
destImgPath)
{
//
加载第一副图片
CxImage
*
imgSrc
=
new
CxImage();
imgSrc
->
Load(srcImgPath,CXIMAGE_FORMAT_JPG);
//
加载背景图片
CxImage
*
imgDest
=
new
CxImage();
imgDest
->
Load(destImgPath,CXIMAGE_FORMAT_JPG);
//
图片融合
CxImage
*
tmpImg
=
new
CxImage();
tmpImg
->
Copy(
*
imgDest);
tmpImg
->
Mix(
*
imgSrc,CxImage::OpAnd,(
long
)(
-
350
),(
long
)(
-
100
),FALSE);
//
输出文字
RGBQUAD c
=
tmpImg
->
RGBtoRGBQUAD(BLACK_PEN);
c.rgbReserved
=
255
;
tmpImg
->
DrawString(
0
,
75
,
33
,m_strName,c,
"
宋体
"
,
14
,
10
,
0
,
0
,
true
);
//
显示处理后的图片
if
(m_bitmap) DeleteObject(m_bitmap);
m_bitmap
=
tmpImg
->
MakeBitmap(m_picture.GetDC()
->
m_hDC);
m_picture.SetBitmap(m_bitmap);
delete imgSrc;
delete imgDest;
delete tmpImg;
}