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