1

電話に出る、電話を転送する、顧客と番号を照合するなどのことを行うために、通信会社のソフトウェアを自社のソフトウェアに統合しています。

彼らは、TLB ファイルを含む API ドキュメントを提供してくれました。tlbimp ツールを使用して、実装で使用するアセンブリを作成しました。

tlbimp によって作成されたクラスの一部には、内部コンストラクターが与えられているため、インスタンス化できません。別のクラスがこれらのクラスのインスタンスを返す必要があるため、このインスタンスでは問題ないと思います。

しかし、これは私に考えさせました.tlbimp.exeとTLB全体を使用するときに知っておくべき落とし穴は他にありますか? DllImport/ComImport/PInvoke コードを手動で作成した方がよいでしょうか?

4

2 に答える 2

2

一般に、TLB がある場合、少なくとも tlbimp によって生成されたアセンブリを使用して作業を開始します。

ツール自体は広く使用されており、TLB で提供される定義に基づいて正しいコードを生成します。結果のコードが正しくない状況をいくつか見てきましたが、ほとんどの場合、配列を使用した非常に複雑なマーシャリング状況か、TLB 作成者が単に間違った COM 注釈を追加した場所に戻ってきました。

途中で問題が見つかった場合は、修正を手作業でコーディングすることを検討する必要があります。しかし、私は確かにそのように始めません。

于 2012-05-01T15:13:16.150 に答える
2

タイプ ライブラリで宣言されている種類の COM インターフェイス メソッドを pinvoke することはできません。COM サーバーを実装する DLL はメソッドをエクスポートしません。リフレクションまたはdynamicキーワードを使用して遅延バインディングを使用できますが、それは面倒でエラーが発生しやすくなります。インポートライブラリを使用してください。それがそこにある理由です。

于 2012-05-01T17:56:47.063 に答える