2012-02-22 6 views
1

私はヘッダーファイルのCOMインターフェイスを持っています。私は動作する小さなwin32プログラムを作成しましたが、私のメインプログラムはC#で書かれています。マネージコードにCOMオブジェクトを追加する

だから私が得た唯一のことは、ヘッダー・ファイルであるとき、私は私のメインプログラムでは、このCOMオブジェクトをインポートしたいのですが、私はこれをどのように行うのですか?

私が見たすべての場所私はtlbファイルが必要です..?

私はちょうどあなたには、いくつかの余分な情報が必要かどうか尋ねる、または別の回避策:)すべての応答のための

[UPDATE] まず感謝を持つオブジェクトCOMに新たなんです! 私はいくつかのことを試みましたが、まだ私の問題を解決していません。私の研究では、私は、COM相互運用機能http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx#vcwlkcominteroppart1cclienttutorialanchor2

これは、私を助けていない説明した記事を見つけました。

[Guid("AD87369B-3BBA-4f1c-81C5-B92FCEA9A1F4"), 
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
interface ICamera 
{ 
    //static HRESULT GetCameraInterface(); 
    bool StartPreview(); 
    bool StopPreview(); 
} 
:COMクラスラッパーの作成

[ComImport, Guid("7C075F7F-FD71-40a2-AC63-0D0C4DB39ECA")] 
class CCamera 
{ 
    // Cannot have any members here 
    // NOTE that the C# compiler will add a default constructor 
    // for you (no parameters). 
} 
    1. は、COMコクラスの宣言:しかし、私は次のことを完了できる場合、私は移動を得ることができる必要がありますことを発見しました

      1. QueryInterfaceではなくキャストを使用:

      {CCameraカム=新しいCCamera()を試みます。 ICamera test =(ICamera)cam; //test.StartPreview(); }キャッチ(例外e) {Console.WriteLineを(e.StackTrace)。 }

    私はインターフェイスの一部のメソッドを実装する欠場するのでそう、これは、無効なキャスト例外を取得しますか? そして、どのように私はC++インターフェイスから次のメソッドを実装します:

    static HRESULT GetCameraInterface(void __RPC_FAR *__RPC_FAR *ppvObject); 
    

    [SOLUTION] OK、私は解決策を得たが、私はインターフェイスをラップするためには解決しません。 代わりにC++ dllプロジェクトを作成し、必要なメソッドを公開しました。その後、私のC#プロジェクトでは、これらのメソッドをDllImportで使用できますか?誰かがこれをどのようにアーカイブしたかについてもっと説明が必要な場合は、私にメッセージを送ってください。

  • 答えて

    2

    それはCOM-Objectとして登録されている場合、あなたは追加の参照ダイアログを経由して、それをインポートすることができます。プロジェクトを右クリックし、[参照の追加]をクリックします。次に、 "COM"タブを選択し、あなたのCOMインターフェイスを選択することができます。 .NET用に必要なInteropクラスが自動的に生成されます。

    +0

    はい、私は読むことができましたが、私はWindows CEに開発しています。それはそこにしか登録されていないと思いますか?私はここで深い水の上に耐えてください。 – DNRN

    +0

    comオブジェクトのDLLがありますか?もしそうなら、 "regsvr32.exe YourComLibrary.dll"を実行して登録することもできます。 – Botz3000

    +0

    私はdllを持っていません:( – DNRN

    1

    あなたは、あなたのプロジェクトへの参照として追加することができ、以下の行

    regasm COMDll.DLL /tlb 
    

    でCOM DLLを登録する必要があります。

    1

    私はいくつかの研究を完了し、Cと同じようにidlファイルにヘッダーファイルを含めることができることを発見しました。次に、idlにヘッダーファイルを含める方法を示す2つのリンクと、あなたは.NETで使用できるTBLファイルにIDLをコンパイルします。私はそれを試していない

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa367049(v=vs.85).aspx
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa367064(v=vs.85).aspx

    とヘッダファイルがちょうどより多くが含まれている場合は、いくつかの困難に遭遇することのように見えますCOMの定義、幸運と私にそれがどのように行ったか教えてください。

    関連する問題