5

この質問はできるだけきつく締めるように努めますが、私が非常識なことを言っていると思われる場合は、それはほとんどの場合、重要なポイントを知らないためですので、修正してください.


Windows 環境で、COM インターフェイスを持つ既存のアプリケーションと連携するプログラムを作成して、サードパーティのソフトウェアとやり取りできるようにしています。

このアプリケーションのドキュメントをすべて読みましたが、COM 経由で使用できる関数とデータを定義する TLB ファイルがあると書かれています。

Python で TLB ファイルを使用するにはどうすればよいですか? アプリケーションとやり取りできるようにアプリケーションの progID を検出するにはどうすればよいですか (これはドキュメントには記載されていません)。

私はかなり迷っています。Python にはかなりの経験がありますが、Windows 環境での開発はまったくの初心者です。どんな助けでも非常に役に立ちます。私は win32com のすべてのドキュメントを読んでいますが、TLB ファイルを持ち込むことについて誰も対処していないため、何をすべきかまだわかりません。

4

2 に答える 2

4

尋ねられる質問は、カスタムTLBファイルをPythonで開発されるCOMクライアントにリンクすることです。C#で開発されたCOMサーバーの小さなサンプルコードを作成しました。同じものに、「comtypes」パッケージを使用してPythonクライアントからアクセスします。以下のコードスニペットは次のようになります。

    import comtypes.client as CC
    import comtypes

    ccHandle = CC.CreateObject("CSharpServer.InterfaceImplementation")
    print (ccHandle)
    import comtypes.gen.CSharpServer as CS
    InterfaceHandle = ccHandle.QueryInterface(CS.IManagedInterface)

    print ("output of PrintHi function = ", InterfaceHandle.PrintHi("World"))

上記のPythonスクリプトは、http://msdn.microsoft.com/en-us/library/aa645738(v = vs.71).aspxで入手できるC#COMサーバーコード用ですファイル1:CSharpServer.csを参照)。 。

于 2012-11-20T17:01:19.230 に答える
2

OK、これを行ってからしばらく経ちましたが、私は決してCOMの専門家ではありません。これを行う方法については、WindowsでのPythonプログラミングのCOMの章をお読みください。例(Excelに対して試してみる)に従って、物事がどのように機能するかを理解してください。

まず、PyWin32 Extensionsをまだインストールしていない場合は、インストールします。pythonwin.exeこれは、ユーザーとCOMインターフェイスモジュールを提供するパッケージです。ここから入手してください。

次に、PythonWinの[ツール]メニューから[COMMakepyユーティリティ]を開きます。登録されているCOMコンポーネント(一部はtypelib、その他はDLL)のリストを参照して、使用しているコンポーネントを特定します(少しの検出作業を行う必要があります)。[OK]をクリックして、Pythonグルーコードを生成します。次に、コマンドライン引数を使用して再度実行し-i、ボイラープレートコードを生成して、Pythonスクリプトがこの接着剤を使用できるようにする必要があります。これは、MicrosoftExcelオブジェクトライブラリのO'Reillyの例の言い換えです。

import win32com.client

from win32com.client import gencache
gencache.EnsureModule('{00020813-0000-0000-C000-000000000046}', 0, 1, 2)
earlyBound = win32com.client.Dispatch("Excel.Application")
lateBound = win32com.client.dynamic.Dispatch("Excel.Application")

print earlyBound.ActiveCell()

アーリーバウンドオブジェクトの使用はオプションですが、パフォーマンスは向上します。

ProgIDを見つけることは、やはりちょっとした探偵の仕事ですが、この答えはそれが難しいことを意味しているようです。RegEditを使用してレジストリのHKEY_CLASSES_ROOTハイブを調べて、有望に見えるProgIDが表示されるかどうかを確認してください。

于 2012-04-20T21:48:34.363 に答える