ベクトルドロー・レベルゼロ+

ホーム > コンピュータ > C# > WPF in C#

ホスト統合のVSTAサンプル プロジェクトをコンパイルして、実行する[C#]

作成日 2015.06.06
最終更新日 2015.06.06

概要

Visual Studio Communityが無償で使えるようになったので、Expressエディションで使えなかった機能が使えるようになりました。 Microsoft Visual Studio Tools for Applications(VSTA)は、 VBAやC#を使ったマクロ機能をアプリケーションに組込むことができる機能です。

VSTA Sample Host Integration.docは、SDKをダウンロードする際、一緒にダウンロードすることができます。

インストール

VSTA2013とVSTA2012SDKをインストールします。

ダウンロード先

Microsoft Visual Studio Tools for Applications 2013(VSTA)(外部サイト)

Microsoft Visual Studio Tools for Applications 2012 SDK(外部サイト)

ホスト統合のVSTAサンプル

[VSTA Sample Host Integration]

プロジェクトをコンパイルして、実行する

Compiling and Running a Project

あなたが、プロジェクトを作成したあと、あなたは、BinaryManagerクラスを用いて、アドインを構築して、読み込みます。

  1. あなたのフォ-ムに、「Run」と名前つけられたボタンを追加し、ボタンにイベントハンドラを追加します。
  2. あなたのフォ-ムに、次に示す命令を追加します。:
  3. using System.IO;
    using System.Reflection; 
    
  4. イベントハンドラに、次に示すコードを追加します。:
  5. private void button3_Click(object sender, EventArgs e)
    {
        if (_project == null)
        {
            //Error handling...
            // エラー処理...
            return;
        }
    
        var binaryManager = _project.BinaryManager;
    
        // Find the BinaryItem for the output assembly and its .pdb file.
        // 出力アセンブリとその.pdbファイルのための、BinaryItemを検索します。
        string assemblyName = binaryManager.AssemblyName;
        string pdbName = Path.GetFileNameWithoutExtension(assemblyName) + ".pdb";
    
        VSTA.BinaryItem assemblyItem = null;
        VSTA.BinaryItem pdbItem = null;
    
        foreach (VSTA.BinaryItem item in binaryManager.GetBinaryItems())
        {
            string itemName = item.Name;
            if (String.Equals(itemName, assemblyName, StringComparison.OrdinalIgnoreCase))
            {
                assemblyItem = item;
                if (pdbItem != null)
                    break;
            }
            else if (String.Equals(itemName, pdbName, StringComparison.OrdinalIgnoreCase))
            {
                pdbItem = item;
                if (assemblyItem != null)
                    break;
            }
        }
    
        if (assemblyItem == null)
        {
            // Error handling...
            // エラー処理...
            return;
        }
    
        // Get the assembly as a byte[].
        // byte[]として、アセンブリを取得します。
        Stream assemblyStream = assemblyItem.GetStream();
        byte[] assemblyBytes = new byte[assemblyStream.Length];
        assemblyStream.Read(assemblyBytes, 0, assemblyBytes.Length);
    
        // Get the .pdb as a byte[].
        // byte[]として、.pdbを取得します。
        Stream pdbStream = pdbItem.GetStream();
        byte[] pdbBytes = new byte[pdbStream.Length];
        pdbStream.Read(pdbBytes, 0, pdbBytes.Length);
    
        // Load the raw assembly.
        // 未加工のアセンブリを読み込みます。
        Assembly assembly = Assembly.Load(assemblyBytes, pdbBytes);
    
        // Find the AddIn class.
        // AddInクラスを検索します。
        Type addInType = assembly.GetTypes().FirstOrDefault((t) => t.Name == "AddIn");
    
        if (addInType == null)
        {
            //Error handling...
            // エラー処理...
            return;
        }
    
        // Find the Init method.
        // Initメソッドを検索します。
        MethodInfo initMethod = addInType.GetMethod("Init");
    
        if (initMethod == null)
        {
            //Error handling...
            // エラー処理...
            return;
        }
    
        // Initialize the add-in
        // add-inを初期化します
        initMethod.Invoke(null, null);
    }
    
    

備考:

提供された例は、解説を目的としており、完全に網羅されていません。 例えば、インテグレータは、内部に、あるいは、分離した処理のアドインに呼び出しを作成するために、 アドインのためのホスト・オブジェクトを公開し引き渡したいかもしれません。

この例では、アセンブリとそのシンボルを読み込みます。; これは、デバッグをサポートするためだけに必要で、純粋な実行時の筋書きでは必要ありません。

ページトップへ
WPF in C#
C#トップ
Copyright (C) 2011-2016 kukekko All Rights Reserved.
kukekko@gmail.com
ご連絡の際はアドレスの@は半角にしてください。 また、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません 」。
inserted by FC2 system