明熊JPEG保存DLLを COM 化する

  SavetoJPEGメソッドを登録



COM 作成の基本と
id(1) 〜 id(3) は 上級マテリアルの COM 作成 を参照して下さい

MyCom.idl
  
[id(4), helpstring("メソッド SavetoJPEG")] HRESULT SavetoJPEG(
	[in] BSTR bmpf,
	[in] BSTR jpgf,
	[in] short Value,
	[in] BOOL Prgrs,
	[out,retval] short *pVal
);
  

MyAPI.h
  
STDMETHOD(SavetoJPEG)(
	BSTR bmpf,
	BSTR jpgf,
	short Value,
	BOOL Prgrs,
	short *pVal
);
  

MyAPI.cpp
  
STDMETHODIMP CMyAPI::SavetoJPEG(
	BSTR bmpf,
	BSTR jpgf,
	short Value,
	BOOL Prgrs,
	short *pVal
)
{
	return S_OK;
}
  



  機能を実装



  
// SavetoJPEG用
typedef WORD (__stdcall *LPFUNC_1)
(
	LPCTSTR bmpf,
	LPCTSTR jpgf,
	BYTE Value,
	short Prgrs
);
#define TARGET_DLL "SaveJPG.dll"

STDMETHODIMP CMyAPI::SavetoJPEG(
	BSTR bmpf,
	BSTR jpgf,
	short Value,
	BOOL Prgrs,
	short *pVal
)
{
	HINSTANCE lib;

	// *******************************************
	// DLL ロード
	// *******************************************
	lib = LoadLibrary( TARGET_DLL );
	if ( lib == NULL ) {
		*pVal = -1;
		return S_OK;
	}
	
	LPFUNC_1 SavetoJPEG;

	// *******************************************
	// 関数アドレスのロード
	// *******************************************
	SavetoJPEG = (LPFUNC_1)GetProcAddress( lib, "SavetoJPEG" );
	if ( SavetoJPEG == NULL ) {
		FreeLibrary( lib );
		*pVal = -2;
		return S_OK;
	}

	// *******************************************
	// 実行
	// *******************************************
	WORD wRet;

	_bstr_t Bitmap(bmpf);
	_bstr_t Jpeg(jpgf);
	BYTE nRate;
	nRate = (BYTE)Value;

	wRet = SavetoJPEG( (LPTSTR)Bitmap, (LPTSTR)Jpeg, nRate, Prgrs );

	// *******************************************
	// DLL 解放
	// *******************************************
	FreeLibrary( lib );

	*pVal = (short)wRet;

	return S_OK;
}
  



  実行テスト

  
Set obj = CreateObject("MyCom.MyAPI")

Value = obj.SavetoJPEG( "C:\TEMP\test.bmp", "C:\TEMP\test.jpg", 100, True )
obj.MsgBox( Value )
  



  デスクトップを JPEG ファイルに保存する

MyCom.idl
  
[id(5), helpstring("メソッド SaveDesktoptoJPEG")] HRESULT SaveDesktoptoJPEG(
	[in] BSTR jpgf,
	[in] short Value,
	[in] BOOL Prgrs,
	[out,retval] short *pVal
);
  

MyAPI.h
  
STDMETHOD(SaveDesktoptoJPEG)(
	BSTR jpgf,
	short Value,
	BOOL Prgrs,
	short *pVal
);
  

MyAPI.cpp
  
// DCSavetoJPEG用
typedef WORD (__stdcall *LPFUNC_2)
(
	HDC hDc,
	long nWidth,
	long nHeight,
	LPCTSTR jpgf,
	BYTE Value,
	short Prgrs
);
STDMETHODIMP CMyAPI::SaveDesktoptoJPEG(
	BSTR jpgf,
	short Value,
	BOOL Prgrs,
	short *pVal
)
{
	HINSTANCE lib;

	// *******************************************
	// DLL ロード
	// *******************************************
	lib = LoadLibrary( TARGET_DLL );
	if ( lib == NULL ) {
		*pVal = -1;
		return S_OK;
	}
	
	LPFUNC_2 DCSavetoJPEG;

	// *******************************************
	// 関数アドレスのロード
	// *******************************************
	DCSavetoJPEG = (LPFUNC_2)GetProcAddress( lib, "DCSavetoJPEG" );
	if ( DCSavetoJPEG == NULL ) {
		FreeLibrary( lib );
		*pVal = -2;
		return S_OK;
	}

	// *******************************************
	// 実行
	// *******************************************
	WORD wRet;

	_bstr_t Jpeg(jpgf);
	BYTE nRate;
	nRate = (BYTE)Value;

	HWND hWnd;
	hWnd = GetDesktopWindow();	// デスクトップのウインドウハンドル
	RECT rt;
	GetWindowRect( hWnd, &rt );	// デスクトップのサイズ
	HDC hDc;
	hDc = GetDC( hWnd );	// デスクトップのデバイスコンテキスト

	wRet = DCSavetoJPEG(
		hDc,
		rt.right,
		rt.bottom,
		(LPTSTR)Jpeg,
		nRate,
		Prgrs
	);

	ReleaseDC( hWnd, hDc );

	// *******************************************
	// DLL 解放
	// *******************************************
	FreeLibrary( lib );

	*pVal = (short)wRet;

	return S_OK;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ