当前位置:编程学习 > 网站相关 >>

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)

]

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

    

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

 

成功~!

 

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,