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);
	VariantCopy(&vaTemp, &vaInJson);
	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;
	VariantCopy(vaOutJson, &vaTemoOutJson);
	VariantClear(&vaTemoOutJson);
    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();

猜你喜欢

转载自blog.csdn.net/max2009verygood/article/details/80383800