メソッドの実装とテスト

  ClassViewのクラス名 = CMyAPI




  • 「ClassView タブ」で IMyAPI を選択
  • ポップアップメニューの「メソッドの追加」を選択
  • メソッド名を入力 --> MsgBox
  • パラメータを入力 --> [in] BSTR Message



  MyAPI.cpp





_bstr_t を使用するのに、lightbox.h が手っ取り早いです。後々 lightbox オブジェクトも使用します

  
// MyAPI.cpp : CMyAPI のインプリメンテーション
#include "stdafx.h"
#include "MyCom.h"
#include "MyAPI.h"
#include <lightbox.h>

/////////////////////////////////////////////////////////////////////////////
// CMyAPI


STDMETHODIMP CMyAPI::MsgBox(BSTR Message)
{
	_bstr_t bstr;

	bstr.operator = (Message);
	::MessageBox( NULL, (LPTSTR)bstr, "確認", MB_OK );

	return S_OK;
}
  

リビルド (ビルド) すると、外部依存関係に lightbox.h がエントリされますので、Header Files にドラッグドロップして下さい



  VBScript による実行テスト ( MyCom.vbs または MyCom.wsf )

以下のファイルを作成してエクスプローラでダブルクリックして下さい

MyCom.vbs
  
Set obj = CreateObject("MyCom.MyAPI")
obj.MsgBox( "こんにちは !" )
  

MyCom.wsf
  
<JOB>
<OBJECT id="obj" progid="MyCom.MyAPI" />

<SCRIPT language=VBScript>

	obj.MsgBox( "こんにちは !" )

</SCRIPT>
</JOB>
  

コマンドプロンプトから cscipt.exe MyCom.vbs ( またはMyCom.wsf ) とするか
wscript.exe MyCom.vbs ( またはMyCom.wsf ) としても結構です



  インターネットエクスプローラによる実行テスト (MyCom.htm)

VBScript と JavaScript が使用できますが、実用では VBSCript のほうが優れています

VBScript
  
<SCRIPT language="VBScript">

function Test()

	Dim obj

	Set obj = CreateObject("MyCom.MyAPI")
	obj.MsgBox( "こんにちは !" )

end function

</SCRIPT>

<INPUT type=button value="実行" onClick="Call Test()">
  

JavaScript
  
<SCRIPT language="JavaScript">

function Test() {

	var obj = new ActiveXObject("MyCom.MyAPI");
	obj.MsgBox( "こんにちは !" )

}

</SCRIPT>

<INPUT type=button value="実行" onClick="Test()">
  

このままでは、最初に ActiveX 警告ダイアログが出ます。環境によってはエラーになります。
拡張子を .htm から .hta に変更して実行テストすると、エラーが出なくなります



  VB による実行テスト

VB の場合は結果が少し違います。親ウインドウを NULL としている為に、ボタンのクリックイベントから
実行すると、何度でもメッセージボックスが出ます。

  
Private Sub Command1_Click()

    Dim obj

    Set obj = CreateObject("MyCom.MyAPI")
    obj.MsgBox ("こんにちは !")

End Sub
  



  PHP による実行テスト ( MyCom.php )

以下のコードを MyCom.php として コマンドラインから php.exe を MyCom.php を引数として実行します

※ PHP 4.3.10 では php.exe が異常終了します。2005年 4月現在では 4.3.9 を使用して下さい
( 4.3.6 でも動作確認しています )

  
<?
$Obj = new COM( "MyCom.MyAPI" );
$Obj->MsgBox( 'こんにちは !' );
?>
  



  ActivePerl による実行テスト ( MyCom.cgi )

Win32-API モジュールがインストールされていない場合は、ppm でインストールします。
インストールされているかどうかは、ppm を実行後、query w* と入力して下さい
もし、その中になければ install Win32-API と入力します

  
use Win32::OLE;

$Obj = Win32::OLE->new('MyCom.MyAPI');
$Obj->MsgBox( 'こんにちは !' );
  

  
C:\Documents and Settings\lightbox>ppm
PPM - Programmer's Package Manager version 3.1.
Copyright (c) 2001 ActiveState Corp. All Rights Reserved.
ActiveState is a devision of Sophos.

Entering interactive shell. Using Term::ReadLine::Stub as readline library.

Type 'help' to get started.

ppm> query w*
Querying target 1 (ActivePerl 5.8.2.808)
  1. Win32-API              [0.41] Perl Win32 API Import Facility
  2. Win32-AuthenticateUser [0.02] Win32 User authentication for domains
ppm>
  



  VC++ (コンソール) による実行テスト ( ComTest )

これは、他のCOM を使う時のサンプルになります
( 自分で作った COM を 自分の C で呼ぶ事は無いと思います )

  
// ComTest.cpp : コンソール アプリケーション用のエントリ ポイントの定義
//

#include "stdafx.h"
#include <lightbox.h>

#import "D:\WSC\CLLib\MyCom\Debug\MyCom.dll" no_namespace

inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};

int main(int argc, char* argv[])
{
	int nErr = 0;
	IMyAPIPtr pApp = NULL;
	_bstr_t Message("こんにちは !");

	CoInitialize(NULL);

	try {

		TESTHR(pApp.CreateInstance(__uuidof(MyAPI)));
		nErr++;
		pApp->MsgBox(Message);
		pApp.Release();

	}
	catch(_com_error &e) {
		printf( "%s\n", (LPTSTR)(e.Description() ) );
		if ( nErr > 0 ) {
			pApp.Release();
		}
	}
	
	CoUninitialize();

	return 0;
}
  










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ