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#のオブジェクトへのインターフェイスを得るのですか?
私が知っている - しかし、私はSetTimeFormatは私が\t pIFwdをコンストラクタにこれを移動したときに/グローバルまたは何か –
@LeonHavinそして、MFC DLLから完全に分離された呼として来ているに述べたように(__ uuidofを(MyFlexForwarder)) ;また、IFlexForwarderPtr pIFwdクラスのメンバを作成します "エラー - 適切な演算子なしのクラス型のオブジェクトの呼び出し(関数型へのポインタへの変換関数)" – MickyD