COM开发之结构体

本例把结构体作为参数在Com和C#之间传递,结构体有两个参数ComID和ComName,

C#中初始化结构体,传递给COM,Com处理后,传回给C#。

首先打开上例中的FirstCom项目(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)

]

interface 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项目,增加如下代码来测试一下:

    

           //初始化结构体

            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

 

成功~!

 

 

posted @ 2011-05-17 15:03  xiaokang088  阅读(2814)  评论(1编辑  收藏  举报