VC6.0调用vs2010生成CImage类的动态库DLL
(2018-03-30 17:37:14)
标签:
vc6vs2010cimagedll调用 |
分类: 代码天地 |
VC6.0调用vs2010生成CImage类的动态库DLL
一 简要说明
2 VC6.0启动快,生成代码小,对于一般功能要求,完全可以达到要求。
3 对于VC6中没有,而VS2005以上有的新功能,则可以在高环境下编为动态库供VC6下使用。
下面以很强图像处理功能CImage类为例,说明方法步骤:
可以参考以下的相关内容
VC6 VC2010 C#调用C#的COM
C# VC6 VC2010调用C#的动态库DLL
c# VC6调用VC6编写的COM
C# VC6调用VC6的动态库DLL
本代码主要来自网上的
,并做了适当的修改
二 创建VS2010动态库Image2010
1 打开VS2010,新建 -- 项目 -- Visual C++ -- Win32 -- Win32项目
点
2 加入 头文件 Image2010.h
#ifndef AFX_EXT_CLASS
#define AFX_EXT_CLASS __declspec(dllimport)
#endif
class AFX_EXT_CLASS CImage2010
{
private:
public:
public:
};
3 改写cpp实现文件 Image2010.cpp
// Image2010.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#define AFX_EXT_CLASS __declspec(dllexport)
#include "stdafx.h"
#include "Image2010.h"
//注意生成动态库需要的头文件,要放到实现文件.CPP内,不要放到头文件.H内,否则VC6下引用头文件找不到
#include < atlimage.h >
#include < atlconv.h >
CImage2010::CImage2010(void)
{
}
CImage2010::~CImage2010(void)
{
}
inline HRESULT CImage2010::Load( LPCSTR pszFileName )
{
//void转换为CImage ,以便 调用其函数
}
inline void CImage2010::SaveScreen(LPCSTR filename,HDC hdcSrc,RECT rect)
{
//HDC hdcSrc = ::GetDC(NULL);
int nBitPerPixel = GetDeviceCaps(hdcSrc, BITSPIXEL);
int nWidth = rect.right-rect.left;//GetDeviceCaps(hdcSrc, HORZRES);
int nHeight = rect.bottom-rect.top;//GetDeviceCaps(hdcSrc, VERTRES);
((CImage*)m_pImage)->Create(nWidth, nHeight, nBitPerPixel);
// BitBlt(((CImage*)m_pImage)->GetDC(), 0, 0, nWidth, nHeight, hdcSrc, rect.left, rect.top, SRCCOPY);
StretchBlt(((CImage*)m_pImage)->GetDC(), 0, 0, nWidth, nHeight, hdcSrc, rect.left, rect.top, nWidth, nHeight, SRCCOPY);
::ReleaseDC(NULL, hdcSrc);
((CImage*)m_pImage)->ReleaseDC();
USES_CONVERSION;
((CImage*)m_pImage)->Save(A2T(filename), Gdiplus::ImageFormatJPEG);//Gdiplus::ImageFormatPNG);
}
inline BOOL CImage2010::IsNull()
{
}
inline BOOL CImage2010::Draw( HDC hDestDC, const RECT& rectDest )
{
}
inline
{
}
4 生成 release版本
5 复制相关的文件 .h .dll .lib
三 VC6.0
1 开启 Microsoft Visual C++ 6.0,创建基于对话框的程序,
2 复制三个文件 Image2010.h 、Image2010.lib 和 Image2010.dll
到自己的工程文件夹下
3 引入头文件和库
4 建立按钮函数调用调入图形,并绘制
void CTcigDlg::OnButton1()
{
RECT rect;
rect.left=100;
rect.top=100;
rect.right=500;
rect.bottom=400;
m_image.SaveScreen("15.jpg",GetDC()->m_hDC,rect);
}
四 附加说明
vs2010
方法一
#ifndef MY_DLL_API #define MY_DLL_API _declspec(dllexport) #else #define MY_DLL_API _declspec(dllimport) #endif #include < Windows.h > MY_DLL_API int add(int x, int y);
#include "MyDLL.h"
int add(int x, int y)
{
return x+y;
}
VC6使用方法 同上文
#include "MyDll.h"
#pragma comment(lib,"MyDll.lib")
int a=add(5,6);
-----------
方法二
1 头文件 testDll.h
#include
using namespace std;
extern "C" _declspec(dllexport) int __stdcall MyDll( int i1
);
2 cpp文件 testDll.cpp
int __stdcall MyDll( int i1 )
{
}
3 vc6.0 下 的 使用
typedef int ( __stdcall *pMyDll)( int i1 );

加载中…