工作小结

本文探讨了Win2000环境下动态加载DLL的问题及解决方法,分析了VS2005开发的ActiveX控件在XP系统中运行失败的原因,并提供了详细的解决方案。此外还介绍了使用CxImage库实现图片融合与文字输出的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}
复制代码



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/10/10/1308291.html,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值