2017-11-27 22 views
0

DLLにC#オブジェクトがあります。 MFC DLLからCOM経由でこのオブジェクトのメソッドを呼び出します。MFC DLLからCOMでラップされたC#オブジェクトへのインターフェイスを取得する方法

BOOL CForwarder::InitMyManagedFlex() 
{ 
    // Initialize COM. 
    HRESULT hr = CoInitialize(NULL); 

    // Create the interface pointer. 
    IForwarderPtr pIFwd(__uuidof(MyForwarder)); 

    long lResult = 0; 
    VARIANT_BOOL ret = FALSE; 
    BSTR bstr = AsciiToBSTR("AAA"); 

    // Call the Add method. 
    pIFwd->Start(bstr, &ret); 

    SysFreeString(bstr); 

    wprintf(L"The result is %d\n", ret); 

    // Uninitialize COM. 
    CoUninitialize(); 

    return (ret == VARIANT_TRUE) ? TRUE : FALSE; 
} 

その後、まったく同じ方法で別のメソッドSetTimeFormatを呼び出します。 問題は、この方法で呼び出すたびに新しいC#オブジェクトをインスタンス化しますが、実際には最初に作成された同じオブジェクトに到達しようとしていて、そのプロパティの1つを別の値に設定するだけです。

問題は、この行であるように思わ:

IForwarderPtr pIFwd(__uuidof(MyForwarder)); 

それでは、どのように私の代わりに新しいものを作成するのと同じC#のオブジェクトへのインターフェイスを得るのですか?

答えて

0
// Create the interface pointer. 
IForwarderPtr pIFwd(__uuidof(MyForwarder)); 

実際にその行は2つのことを行います。 UUID/ClassIDがMyForwarderであり、が結果をpIFwdに格納するCOMオブジェクトが作成されます。

あなたがするたびにこれを試して、それを作成したくない場合は、次の

IForwarderPtr pIFwd(__uuidof(MyForwarder)); 
pIFwd->Start(bstr, &ret); 
. 
. 
. 
. 
pIFwd->SetTimeFormat (....) 

. 
. 
. 
SysFreeString(bstr); 

wprintf(L"The result is %d\n", ret); 

// Uninitialize COM. 
CoUninitialize(); 
+0

私が知っている - しかし、私はSetTimeFormatは私が\t pIFwdをコンストラクタにこれを移動したときに/グローバルまたは何か –

+0

@LeonHavinそして、MFC DLLから完全に分離された呼として来ているに述べたように(__ uuidofを(MyFlexForwarder)) ;また、IFlexForwarderPtr pIFwdクラスのメンバを作成します "エラー - 適切な演算子なしのクラス型のオブジェクトの呼び出し(関数型へのポインタへの変換関数)" – MickyD

0

あなたは声明CoUninitializeの(自分のコンストラクタに

HRESULT hr = CoInitialize(NULL); 
_pIFwd(__uuidof(MyForwarder)); //where _pIFwd is a member variable of your class 

&を次の文を移動することができます)へあなたのデストラクタ。 IForwardPtrをクラスのメンバー変数として追加します。

このようにして、同じインスタンスを再利用できるようになります。

+0

クラスのメンバでそれを固執 –

+0

さらに、コンストラクタを追加すると IForwarderPtr pIFwd(__ uuidof(MyForwarder)); mpifwd = pIFwd そして、IForwarderPtr mpIFwdをクラスのメンバとして追加すると、宣言されていない識別子としてコード内のすべてのmpIFwdが返されます。 –

+0

IForwarderPtrインターフェイスのヘッダファイルはありますか? –

関連する問題