COM开发之结构体
本例把结构体作为参数在Com和C#之间传递,结构体有两个参数ComID和ComName,
C#中初始化结构体,传递给COM,Com处理后,传回给C#。
首先打开上例中的FirstCom项目(html">http://www.cnblogs.com/xiaokang088/archive/2011/05/16/2047376.html),请按照以下步骤操作。
1. 打开FirstCOM.idl文件,增加一个结构体如下:
struct FirstStruct
{
int ComID;
[string] WCHAR* ComName;
};
2.上例中,有一个接口定义的地方,如下,增加一个方法(红色为新增)
[
object,
uuid(645EE65A-27F6-406B-B2E8-7417660FE0E8),
dual,
nonextensible,
pointer_default(unique)
]
inte易做图ce IFirstClass : IDispatch{
[id(1)] HRESULT Add([in] LONG para1, [in] LONG para2, [out,retval] LONG* result);
[id(2)] HRESULT TestStruct(struct FirstStruct* result);
};
3.打开头文件FirstClass.h,找到public修饰符,增加一个方法(红色为新增),如下
public:
STDMETHOD(Add)(LONG para1, LONG para2, LONG* result);
STDMETHOD(TestStruct)(struct FirstStruct* result);
};
4.打开源文件FirstClass.cpp,看到上例中增加的方法,在其下方,增加结构体的处理方法(红色为新增)
// FirstClass.cpp : CMyComServer 的实现
#include "stdafx.h"
#include "FirstClass.h"
#include <string>
// FirstClass
STDMETHODIMP CFirstClass::Add(LONG para1, long para2, LONG* result)
{
// TODO: 在此添加实现代码
*result = para1 + para2;
return S_OK;
}
STDMETHODIMP CFirstClass::TestStruct(struct FirstStruct* result)
{
// TODO: 在此添加实现代码
result->ComID+=10;
result->ComName= _T("DoCom");
return S_OK;
}
5.编译该项目,成功后打开WPF项目,增加如下代码来测试一下:
view sourceprint?//初始化结构体
FirstComLib.FirstStruct firstStruct = new FirstComLib.FirstStruct()
{
ComName = "ManageMethod",
ComID = 100
};
//测试结构体
firstClass.TestStruct(ref firstStruct);
Debug.WriteLine("ComID:" + firstStruct.ComID);
Debug.WriteLine("ComName:" + firstStruct.ComName);
打印结果为:
ComID:110
ComName:DoCom
成功~!
补充:综合编程 , 其他综合 ,