vc6.0调用dll

vc6.0调用dll

版本:暂无
软件类型
其他软件
软件大小
11.19 KB
支持系统
WinAll
更新时间
2022-08-06

VC6 CImage加载DLL是在电脑中比较常用的一个文件,而对于很多不熟悉电脑的朋友来说,这款文件不能调用时就能麻烦,现在陈三网就为大家提供免费的问价即使用方法,有需要或者不懂的朋友可以来本站下载哦。

文件介绍

由于VC6启动速度快,产生的执行代码小,还有可爱的类向导,所以许多C++程序员还工作在VC6环境中。

但是我们想在VC6中用VS2005中的新功能怎么办呢?例如CImage类(有很强的图像处理功能).当然我们无法直接使用CImage了,经过我的思考和实践,以下方法是可行的:

用VS2005生成一个CImage2005动态库,然后用VC6调用就可以了。

文件使用方法

今天改一个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 

// 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); //最后还是释放一下资源

免责声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理,我们将尽快删除相关内容。

发表评论
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关
  • 全部评论(0
    还没有评论,快来抢沙发吧!