📄 structcombine.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 + -