FAQ
ActiveX DLLからのオブジェクトをVBAに渡す方法

ナレッジ番号:5456 | 登録日:2023/07/27 | 更新日:2024/12/02

【概要】

ActiveX DLLを作成したのち、ArcMapへそのDLLからのオブジェクト
(ここではGeometryオブジェクト)を渡す方法を示します。


【手順】

以下のステップはDLLからのオブジェクト(ここではGeometryオブジェクト)をArcMapへ渡す方法です。
以前にカスタム・ツールあるいはカスタム・コマンドを作成したことがあることを仮定しています。

  1. ICommandをインプリメントしたVisual Basic ActiveX DLLプロジェクトを作成します。これを行うには、下記の関連情報「Visual BasicでICommandをインプリメントする方法」をご覧下さい。その際、クラス名やプロジェクト名などは以下のように設定します。

    ・クラス名:clsGeom
    ・プロジェクト名:AoDemo
    ・プロジェクト プロパティの「プロジェクトの説明」に"ArcObjects Geometry"と入力

    ・クラスモジュール・ファイル:clsGeom.cls
    ・プロジェクト・ファイル:AoDemo_clsGeom.vbp
    ・DLLファイル:AoDemo_clsGeom.dll

  2. Visual BasicのActiveX DLLプロジェクト内で、IGeometryへの参照を保持するモジュールレベルのオブジェクト変数を宣言します。

    
    Private m_pGeom As IGeometry
    
    
  3. OnClickイベント・プロシージャ内でGeometryオブジェクトを作成し、宣言したオブジェクト変数(m_pGeom)へ設定します。

    
    Private Sub ICommand_OnClick()
                           
      Dim pPt As IPoint
      Set pPt = New Point
      pPt.X = 15
      pPt.Y = 25
      Set m_pGeom = pPt
                           
    End Sub
    
    
  4. Geometryを返すPublic Propertyプロシージャを作成します。

    
    Public Property Get Geometry() As IGeometry
      Set Geometry = m_pGeom
    End Property
    
    
  5. AoDemo_clsGeom.dllという名前でDLLをコンパイルします。

    A. 「ファイル」 > 「DLLの作成」を選択してDLLを作成します。
    B. 「プロジェクト」 > 「<プロジェクト名>のプロパティ」を選択します。
    C. 「コンポーネント」タブを選択します。
    D. 「バイナリ互換」にチェックを入れます。
    E. 「ファイル」 > 「DLLの作成」を選択してDLLを作成します。

  6. カスタム・コマンドをArcMapへ追加します。

    A. カスタム・コマンドを追加したいArcGISアプリケーション(ArcMap、ArcCatalog、ArcSece)を起動します。
    B. 「ツール」 > 「カスタマイズ」を選択します。
    C. 「コマンド」タブを選択します。
    D. 左下隅の「保存先」プルダウン・メニューからコマンドを保存したい場所を選択します。
    E. 「ファイルから追加」をクリックします。
    F. カスタム・コマンドを含むDLLへ進み、選択して「OK」ボタンを押します。
    G. 「追加オブジェクト」ダイアログが表示されると、ArcMap、ArcCatalog、ArcSceneにレジストリ登録された新規オブジェクトが報告されますので、「OK」をクリックします。
    H. 「コマンド」リストからコマンドをクリック&ドラッグして任意のツールバーに追加します。「カテゴリ」リストはDLL作成時に設定したカテゴリ名になっています。
    I. 「閉じる」をクリックします。

  7. 「ツール」 > 「マクロ」 > 「Visual Basic Editor」をクリックし、Visual Basicエディタを開きます。

  8. ProjectのThisdocumentコード・モジュールに以下のコードを追加します。

    
    Public Sub GetGeometry()
      Dim pApp As IApplication
      Dim pDoc As IDocument
      Dim pGeometry As IGeometry
      Dim pCmdItem As ICommandItem
      Dim pCmd As ICommand                      
    
      Dim pClsSelection As AoDemo.clsGeom
      Dim pID As New UID
      pID = "AoDemo.clsGeom"
      Set pApp = Application
      Set pDoc = pApp.Document
      Set pCmdItem = pDoc.CommandBars.Find(pID, True, False)
      Set pCmd = pCmdItem.Command
      Set pClsSelection = pCmd
      Set pGeometry = pClsSelection.Geometry
    
      If Not pGeometry Is Nothing Then
        If Not pGeometry.IsEmpty Then
          MsgBox "X: " & pGeometry.Envelope.LowerLeft.X
          MsgBox "Y: " & pGeometry.Envelope.LowerLeft.Y
        Else
          MsgBox "ジオメトリは空です"
        End If
      Else
        MsgBox "ジオメトリがありません"
      End If
    End Sub
    
    
  9. 「ツール」 > 「参照設定」をクリックします。

  10. Step1の「プロジェクトの説明」に割り当てた"ArcObjects Geometry"を探し、チェックを入れます。

  11. ArcMapに追加したコマンドをクリックし、Geometryを初期化します。

  12. 「ツール」 > 「マクロ」 > 「マクロ」をクリックし、GetGeometryマクロを実行します。DLLからArcMapに渡されたGeometryオブジェクトが実行され、DLL内で作成したポイントのX、Y座標がメッセージボックスで表示されます。

■関連情報 

Visual BasicでICommandをインプリメントする方法

メタデータ

種類

製品