⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 structcombine.cpp

📁 《精通matlab与c++混合编程》的光盘内容
💻 CPP
字号:
// structcombine.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//#include <windows.h>
#include <iostream.h>
#include "stdio.h"


//#include <windows.h>

#include "afxdisp.h"
//#include "mwcomtypes.h"
#include "mwutil.h"
#include "mwcomutil.h"
#include "structcombinecom_1_0.h"


int main(int argc, char* argv[])
{
	CoInitialize(NULL);
	CLSID CLSID_MWCOMUTL;
	IID IID_IMWUtil = __uuidof(IMWUtil);
	IID IID_IMWStruct =__uuidof(IMWStruct);
	CLSIDFromProgID(L"MWComUtil.MWUtil1.0",&CLSID_MWCOMUTL);
//	CLSIDFromProgID(L"MWStruct.MWStruct1.0",&CLSID_MWStruct);
	Istructcombinecom * pStructCombineCom=NULL;
	IMWUtil * pMwutil = NULL;
	IMWStruct * pStruct =NULL;
	HRESULT hr;
	//IMWStruct * pStruct1=NULL;
	//IMWStruct * pStruct2=NULL;
	CoCreateInstance(CLSID_structcombinecom,NULL,
					 CLSCTX_ALL,IID_Istructcombinecom,(void**)&pStructCombineCom);
	CoCreateInstance(CLSID_MWCOMUTL,NULL,
					 CLSCTX_ALL,IID_IMWUtil,(void**)&pMwutil);
	hr=pMwutil->QueryInterface(IID_IMWStruct,(void**)&pStruct);
	//hr=CoCreateInstance(CLSID_MWCOMUTL,NULL,
					 //CLSCTX_ALL,IID_IMWStruct,(void**)&pStruct);
	if(FAILED(hr))
	{
		printf("ERROR");
		void * pMsgBuf;
		::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
						FORMAT_MESSAGE_FROM_SYSTEM,
						NULL,
						hr,
						MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
						(LPTSTR)&pMsgBuf,
						0,
						NULL);
		//Display the string
		//cout << str <<"\r\n";
		cout <<"Error("<<hex<<hr<<"):"
			  <<(LPTSTR)pMsgBuf<<endl;

		//Free
		LocalFree(pMsgBuf);
		return 0;
	}

	//MWStruct mwStruct1;
	
	COleVariant varStructIn1;
	COleVariant varStructIn2;
	COleVariant varStructOut;
	COleVariant varName1;
	COleVariant varName2;

	varName1="STRUCT1";
	varName2="STRUCT2";

	VARIANT * pTempVariant=NULL;
	pTempVariant=LPVARIANT (&varStructIn1);
	pTempVariant->vt=VT_DISPATCH;
	varStructIn2.vt=VT_DISPATCH;
	IMWStruct * pTempMWStruct=NULL;
	pTempMWStruct=(IMWStruct*)varStructIn1.pdispVal;

	//初始化输入结构参数
	//MWStruct * ps=new MWStruct;
	COleVariant varDims;
	VARIANT varFields,varEmpty;
	varDims=(long)1;
	VariantInit(&varFields);
	VariantInit(&varEmpty);
	varEmpty.vt=VT_BSTR;	
	varFields.vt=VT_BSTR|VT_ARRAY;

	/*double xdata[2][2]={1.0,2.0,3.0,4.0};
	VARIANT x,y,tmp;
	VariantInit(&x);
	VariantInit(&y);
	VariantInit(&tmp);
	x.vt=VT_R8|VT_ARRAY;
	SAFEARRAYBOUND bound1[2];
	bound1[0].cElements=2;
	bound1[0].lLbound=0;
	bound1[1].cElements=2;
	bound1[1].lLbound=0;
	x.parray=SafeArrayCreate(VT_R8,2,bound1);
	if (x.parray==NULL)
	{
		AfxMessageBox(" 内存分配失败");
		return 0;
	}
	x.parray->pvData=xdata;*/
	//varFields.vt=VT_BSTR;
	
	SAFEARRAY * psa1,* psa2;
	BSTR * bstrArray1,* bstrArray2;
//	HRESULT hr;
	SAFEARRAYBOUND bound[2];
	bound[0].cElements=2;
	bound[0].lLbound=0;
	bound[1].cElements=2;
	bound[1].lLbound=0;

	CString str="color";	
	psa1=SafeArrayCreate(VT_BSTR,2,bound);
	psa2=SafeArrayCreate(VT_BSTR,2,bound);
	hr=SafeArrayAccessData(psa1, ((void **)&bstrArray1));	
	if(FAILED(hr))
	{
		printf("ERROR On SafeArrayAccessData!\n");
	}
	hr=SafeArrayAccessData(psa2, ((void **)&bstrArray2));	
	if(FAILED(hr))
	{
		printf("ERROR On SafeArrayAccessData!\n");
	}
	//BSTR p=NULL;
	bstrArray1[0]=str.AllocSysString();
	//p=bstrArray1[0];
	bstrArray1[1]=str.AllocSysString();
	str="weight";
	bstrArray2[0]=str.AllocSysString();
	str="height";
	bstrArray2[1]=str.AllocSysString();
	varEmpty.bstrVal=str.AllocSysString();
	SafeArrayUnaccessData(psa1);
	SafeArrayUnaccessData(psa2);
	
	varFields.parray=psa1;	

	//pTempMWStruct->Initialize(varDims,varFields);
	//pStruct->Clone(&pTempMWStruct);
	pStruct->Initialize(varDims,varEmpty);

	varFields.parray=psa2;

	pTempMWStruct=(IMWStruct*)varStructIn2.pdispVal;
	//pTempMWStruct->Initialize(varDims,varFields);
	pTempMWStruct->Initialize(varDims,varEmpty);

	varStructOut=pStructCombineCom->structcombine(1,
												(LPVARIANT)varStructOut,
												varStructIn1,
												varStructIn2,
												varName1,
												varName2);
	
	//bstrArray[0] = str.AllocSysString();
	//bstrArray[1] = str.AllocSysString();	

	//pTempMWStruct->Initialize();

	//构造输入结构参数
	CoUninitialize();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -