ArcGISおよびSkyline開発ログ20200801に基づく

       5年前に小さなトピックを申請しました-TerraExplorerに基づいたルーティング結果の3次元表示、それは本当に遅れることはありません。この2日間でテクニカルルートを確認します。

1.インストールと構成
       前回の記事の紹介によると、TerraExplorer5.1.3とTerraBuilder1.7.6はコンピューターの時間を変更する必要がなく、使用に問題はありませんが、開発することはできません。VB、VC、VC #ArcGIS VBAを含め、機能しません。多くの方法を試しても機能しません。後で、TerraExplorer6.5およびTerraBuilder6.5をインストールした後、ライセンスファイルの有効期限が切れていても、変更後に使用できます。心配しないで、正直に時間を変更してTE / TBを使いましょう。
ArcGIS 10.2SDKはVS2013にインストールできますが、それでもアドインを開発することはできません。Webマスターの経験は次のとおりです。

         まず、このような問題が発生しました。ValidateAddInXMLTask
エラー2「ValidateAddInXMLTask」タスクが予期せず失敗しました。
System.IO.FileNotFoundException:ファイルまたはアセンブリ "Microsoft.VisualStudio.Shell.11.0、Version = 11.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a"またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

警告:アセンブリバインディングログはオフになっています。
アセンブリバインディングの失敗ログを有効にするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)を1に設定します。
注:アセンブリバインディングの失敗ログに関連して、パフォーマンスが低下します。
この機能をオフにするには、レジストリ値[HKLM \ Software \ Microsoft \ Fusion!EnableLog]を削除してください。GuanluanView
        はMicrosoft.VisualStudio.Shell.11.0インストールパッケージをダウンロードしましたが、これは約227MB解決されました。
       その後、別の問題が発生しました。つまり、このアドインにGUIコンポーネントが見つかりません。多くの方法を試した後、ArcGISの可能性があります。 10.2はアドインを登録できません。対応するdllが発生しましたが、これはトリックではありません。
      最初からスクラッチしてみたところ、このアドイン方式にも問題があり、ArcGISとの結合が高すぎて適切ではないことがわかりました。この方法は、VBAを使用する場合ほど良くありません。VBAの主な問題は、開発能力が弱いことですが、以下に示すように、ArcMapとの相互作用が向上します。

ç¹å»æ¥çåå¾

 

 2. VBAはプロセスメッセージをVC#に送信します

「プログラミングが大好きです」というメッセージを送信するためのVBAコード:

オプション明示

 プライベートタイプCOPYDATASTRUCT

  dwData As Long

  cbData As Long

  lpData As Long

 エンドタイプ

 プライベート定数WM_COPYDATA =&H4A

プライベート宣言関数FindWindowLib "user32"エイリアス_

     "FindWindowA"(ByVal lpClassName As String、ByVal lpWindowName _

      文字列として)長さ

 プライベート宣言関数SendMessageLib "user32"エイリアス_

     "SendMessageA"(ByVal hwnd As Long、ByVal wMsg As Long、ByVal _

      wParam As Long、lParam As Any)As Long

  'メモリのブロックをある場所から別の場所にコピーします。

 プライベート宣言サブCopyMemoryLib "kernel32"エイリアス "RtlMoveMemory" _

     (hpvDest As Any、hpvSource As Any、ByVal cbCopy As Long)

 

プライベートサブCommandButton1_Click()

COPYDATASTRUCTとしての薄暗いCD

   薄暗いThWnd

   Dim buf(1〜1024)As Byte

   文字列を暗くする、i As Long、lLen As Long

   'ターゲットアプリケーションのハードウェアを取得します

   ThWnd = FindWindow(vbNullString、 "Target")

   a $ = "我爱编程"&Format(Now、 "yyyy-MM-dd HH:mm:ss")& "!"

   '文字列をバイト配列にコピーし、ASCIIに変換します

   lLen = LenB(StrConv(a、vbFromUnicode))

   CopyMemoryを呼び出す(buf(1)、ByVal a、lLen)

   cds.dwData = 3

   cds.cbData = lLen + 1

   cds.lpData = VarPtr(buf(1))

   i = SendMessage(ThWnd、WM_COPYDATA、ThisDocument.Parent.hwnd、cds)

エンドサブ

 

プライベートサブUserForm_Initialize()

'これにより、ターゲットアプリが実行されていることがわかります

 'そしてあなたは正しいhWndを指しています

   Me.Caption = Hex $(FindWindow(vbNullString、 "Target"))

エンドサブ

 

メッセージを受信するForm1.csのVC#コード

 システムを使用する;

 System.Collections.Genericを使用する;

 System.ComponentModelを使用します。

 System.Dataを使用する;

 System.Drawingを使用する;

 System.Linqを使用する;

 System.Textを使用します。

 System.Windows.Formsを使用する;

 System.Runtime.InteropServicesを使用する;

 

名前空間 WindowsFormsApplication1

{{

    パブリック 部分 クラス Form1  : フォーム

    {{

        パブリック Form1()

        {{

            InitializeComponent();

            this .Text =  "Target" ;

        }

 

        保護 オーバーライド ボイド DefWndProc(REF メッセージ M)

        {{

            スイッチ (m.Msg)

            {{

                ケース WM_COPYDATA:

                    COPYDATASTRUCT  cdata =  new  COPYDATASTRUCT();

                    タイプ mytype = cdata.GetType();

                    cdata =(COPYDATASTRUCT)m.GetLParam(mytype);

                    this .textBox1.Text = cdata.lpData;

                    休憩;

                デフォルト

                    base .DefWndProc(ref  m);

                    休憩;

            }

        }

        // WM_COPYDATAメッセージの主な目的は、読み取り専用データをプロセス間で受け渡せるようにすることです。

        private  const  int  WM_COPYDATA = 0x004A;

        //メッセージの受け渡し中のWM_COPYDATAよるWindowsは、継承同期モードを提供しません。

        //その中で、WM_COPYDATAに対応する16進数は0x004Aです

        public  struct  COPYDATASTRUCT

        {{

            public  int  dwData;

            public  int  cbData;

            [ MarshalAsUnmanagedType .LPStr)]

            パブリック 文字列 lpData;

        }

 

    }

}

結果チャートは次のとおりです。

 ææは¢2.pngです

詳細については、xiaok海洋測量およびマッピングネットワークと同名の公開アカウントを参照してください。

おすすめ

転載: blog.csdn.net/u011115875/article/details/108030024