MFC ActiveX 開發COM C#調用(COM 接口參數類型是VARIANT FAR *【出參】)轉換c# ref object

c++ 接口這樣定義:

[id(1), helpstring("方法PrintRR")] LONG PrintRR(VARIANT vaInJson, VARIANT* vaOutJson);

c++接口實現:
 

LONG CAAACtrl::PrintRR(VARIANT &vaInJson, VARIANT FAR* vaOutJson)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加調度處理程序代碼
    VARIANT vaTemp;
	VariantInit(&vaTemp);
	
	vaTemp.vt = VT_BSTR;
	string strTemp = _bstr_t(vaTemp.bstrVal);
	VariantClear(&vaTemp);
    
	char * pOutJson = new char[1024];
	long lR1 = Printpp(strTemp.c_str(), pOutJson);


	VARIANT vaTemoOutJson;
	VariantInit(&vaTemoOutJson);
	vaTemoOutJson.vt = VT_BSTR;
	_bstr_t bstr_t(pOutJson);
	BSTR bstr = bstr_t;
	vaTemoOutJson.bstrVal = bstr;

    delete pOutJson;
	pOutJson = NULL;
	return lR1;
}

long CAAACtrl::Printpp(const char * pInJson, char *pOutJson)
{
	strcpy(pOutJson, pInJson);
	return 0;
}

聲明:

private:

	long Printpp(const char * pInJson, char *pOutJson);

protected:

	LONG PrintRR(VARIANT &vaInJson, VARIANT FAR* vaOutJson);

C# 調用

// Create a string to pass to the COM object.
            string helloString = "";
            // Wrap the string with the VariantWrapper class.
            object var = new System.Runtime.InteropServices.VariantWrapper(helloString);

            string strInJson = "helloword";
            object objInJson = strInJson as object;

            this.axAAA1.PrintRR(objInJson, ref var);
            helloString = var.ToString();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章