VC6 CImage 加载jpg png bmp

From: http://hi.baidu.com/crazyonline/blog/item/3bad6959b2d31b232934f0f4.html


今天改一个VC6的程序,因为需要加载png和jpg图像,于是想到了CImage,但是VC6又不支持CImage类,郁闷了,网上看了一下,都是改这改那,改得头大。后来看到有一个人提出一个建议,用VS2008写一个DLL让VC6去动态加载不就OK了。恩,这个注意不错,于是乎就这么做了吧

先建立一个工程,叫AtlImage吧,在AtlImage头文件中声明[自动向导其实帮我生成了]:

#ifdef ATLIMAGE_EXPORTS
#define ATLIMAGE_API __declspec(dllexport)
#else
#define ATLIMAGE_API __declspec(dllimport)
#endif

//需要添加一个extern C,否则导出函数名···额郁闷死你
extern "C" ATLIMAGE_API HBITMAP LoadAtlImage(const char * pFileName);

然后在AtlImage.cpp中实现:

// AtlImage.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "AtlImage.h"
#include <atlimage.h>
// This is an example of an exported function.哇靠,下面够简单吧
ATLIMAGE_API HBITMAP LoadAtlImage(const char * pFileName)
{

CImage image;
HRESULT hr=image.Load(pFileName);
if (SUCCEEDED(hr))
{
   return image.Detach();
}
else
{
   return NULL;
}
}

oK,编译成一个release版的DLL即可成功加载,在需要使用的地方如下声明:
typedef HBITMAP (*LoadImageFunc)(const char *pStrFileName);
m_funLoadAtlImage=NULL;
m_hModule=::LoadLibrary("AtlImage.dll");
if(!m_hModule)
{
   AfxMessageBox("缺少动态链接库:AtlImage.dll");
   m_hModule=NULL;
}
m_funLoadAtlImage=(LoadImageFunc)::GetProcAddress(m_hModule,"LoadAtlImage");
if (!m_funLoadAtlImage)
{
   AfxMessageBox("Function Miss : LoadAtlImage");
   m_funLoadAtlImage=NULL;
}

HBITMAP hBitmap=m_funLoadAtlImage(“test.png”);

FreeLibrary(m_hModule); //最后还是释放一下资源

万事大吉.如果你很懒,直接需要DLL的留Email吧。百度空间不能存文件,不然我直接贴上来了···哎

忽然想到一个问题,我可以存到msdn上面去,哈哈。下面是下载地址:

http://download.csdn.net/source/1691273


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

csgo被会话踢出什么鬼_【解决方案】“CSGO游戏—断开连接,VAC无法验证会话”问题解决方案...

本帖最后由 漠视迩旳骄傲 于 2020-4-23 17:01 编辑近期陆续收到很多小伙伴们反馈“CSGO游戏—断开连接&#xff0c;VAC无法验证会话”问题&#xff0c;此问题并非360安全卫士导致。我们收集了游戏官网与热心网友提供的解决方法&#xff0c;整理此方案贴供大家参考&#xff0c;解…

Cross-Site Scripting(XSS)的类型

本文源自&#xff1a; https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting 在原文理解上翻译为中文。 背景 本文描述多种不同类型的XSS攻击&#xff0c;和它们之间的相互关系。 最早&#xff0c;有两种类型的XSS攻击被定义&#xff0c;Stored 和 Reflected &#…

DynamipsGUI下CISCO SDM的安装配置

本人刚开始自学CCNA&#xff0c;在教材里有许多SDM内容&#xff0c;但是手头又没有CISCO路由器&#xff0c;只能借助于模拟器。一开始用的是SDM的DEMO版本&#xff0c;虽然也进去了&#xff0c;但是有很多功能没法使用&#xff0c;只能起熟悉作用&#xff0c;于是就想找一个更好…

原生js实现tab选项卡切换

原生js实现tab选项卡切换

CImage类的用法(转帖)

From: http://elevenguy.blog.163.com/blog/static/616122092010053550593/ 我们知道&#xff0c;Visual C的CBitmap类和静态图片控件的功能是比较弱的&#xff0c;它只能显示出在资源中的图标、位图、光标以及图元文件的内容&#xff0c;而不像VB中的Image控件可 以显示出绝大…

java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)

队列的定义&#xff1a;队列(Queue)是只允许在一端进行插入&#xff0c;而在另一端进行删除的运算受限的线性表。(1)允许删除的一端称为队头(Front)。(2)允许插入的一端称为队尾(Rear)。(3)当队列中没有元素时称为空队列。(4)队列亦称作先进先出(First In First Out)的线性表&a…

ListT please check srcIndex

这种错误的原因&#xff0c;是因为List<T>不是线程安全的。 转载于:https://www.cnblogs.com/chucklu/p/4303873.html

vue 实现点击“增加“”按钮,添加一个HTML元素

vue 实现点击“增加“”按钮&#xff0c;添加一个HTML元素

期待flash三剑客

flash cs5 flash catalyst flash builder

pythonlocust使用方法_使用python的locust库进行性能测试

Locust(俗称 蝗虫), 一个轻量级的开源压测工具&#xff0c;用Python编写。安装pip3 install locustPython编写性能测试脚本import jsonfrom locust import HttpLocust, TaskSet, task"""创建后台管理站点压测类&#xff0c;需要继承TaskSet可以添加多个测试任务…

Windows SDK笔记(三):定制控件消息处理函数

From: http://www.vckbase.com/document/viewdoc/?id1009 一、概述 控件的消息处理函数是由系统定义好了的&#xff0c;通常情况下&#xff0c;不需要自己提供。 但当需要对控件进行特殊控制时&#xff0c;可以提供一个消息处理函数&#xff0c;替换原来的消息处理函数。 自…

python tip

Python代码 def run(name,age,sex): print name :,name,age:,age,sex:,sex >>> run(xiaoming,namexiaoming,sexboy) SyntaxError: non-keyword arg after keyword arg def run(name,age,sex): print name :,name,age:,age,sex:,sex >>> run…

js实现使用drag实现元素拖拽排序

js实现使用drag实现元素拖拽排序

.NET Core 和 .NET Framework 之间的关系

引用一段描述&#xff1a;Understanding the relationship between .NET Core and the .NET Framework。 .NET Core and the .NET Framework have (for the most part) a subset-superset relationship. .NET Core is named "Core" since it contains the core featu…

博客园开始对X++语言语法高亮的支持

关注X的博客园博友有福啦&#xff0c;现在发布X代码也同样可以实现语法高亮。目前仅支持SyntaxHighlighter插件。请看如下&#xff1a; public void update(boolean _updateParty true, boolean _updateContactPersonLastEdit true) {Address addressOrig this.orig();ttsbe…