工作小结

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;
}

你可能感兴趣的:(工作)