Kuroda Software Service
プロジェクトサンプル
 

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

プロジェクトサンプル

プロジェクトの冒頭部分を参考資料として公開します。

/*--------------------------------------------------------------------------------

D-NETBOX 試用版

Kuroda Software Service 黒田英之  mail: ask@kuroda.bglb.jp

--------------------------------------------------------------------------------*/

#include <windows.h>

#include <mscoree.h>

#include <shlwapi.h>                 //shellユーティリティー

#pragma comment(lib, "shlwapi.lib")  //shellユーティリティー

#include "resource.h"

#import "Mscorlib.tlb" auto_rename

_COM_SMARTPTR_TYPEDEF(ICorRuntimeHost , __uuidof(ICorRuntimeHost));

//Mscorlib.dllインスタンスをグローバルに保持

mscorlib::_AssemblyPtr CORLIB = NULL;

//VT_EMPTY VARIANT (_variant_t 引数のデフォルト値)

const VARIANT EMPTY = {0};

 

//--------------------------------------------------------------------------------

//System.TypeによるInvokeMember_3をラップする

_variant_t SInvoke(mscorlib::_Type *Type, _bstr_t Name, mscorlib::BindingFlags Flags,

_variant_t arg0 = EMPTY, _variant_t arg1 = EMPTY,

_variant_t arg2 = EMPTY, _variant_t arg3 = EMPTY,

_variant_t arg4 = EMPTY, _variant_t arg5 = EMPTY,

_variant_t arg6 = EMPTY, _variant_t arg7 = EMPTY,

_variant_t arg8 = EMPTY, _variant_t arg9 = EMPTY)

{

        //実引数の数を認識する

        long len = 0; _variant_t *Args = &arg0;

        for(long c = 0; c < 10; c++) if(Args[c].vt != VT_EMPTY) len++; else break;

        //SAFEARRAYVARIANT.parrayとし開放を自動化する

        _variant_t Arg; Arg.vt = VT_ARRAY|VT_VARIANT;

        Arg.parray = SafeArrayCreateVector(VT_VARIANT, 0L, len);

        for(long c = 0; c < len; c++) *(_variant_t*)Arg.parray->pvData = Args[c];

        return(Type->InvokeMember_3(Name, Flags, NULL, NULL, Arg.parray));

}

 

©クロダ ソフトウェア サービス programmed by hidebou