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

 

成功~!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值