zoukankan      html  css  js  c++  java
  • 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

     

    成功~!

     

     

  • 相关阅读:
    VB.NET中对象的克隆 利用了内存流内象和序列化
    关于对象组件编写的一点想法
    虽然有人说什么和平第一, 经济第一, 可是我怎么能不因为愤怒而发抖?
    用C# 调用MS speech引擎, 让电脑读文本, 或是存到WAV文件里去.
    抽空看了一下 dockpanel suite, 知道如何用了, 立此存照
    dn081A
    如何列出某类型的所有成员
    上周买了毛爷爷传
    【转载】MySQL双主双从高可用集群架构
    【转载】MySQL和Keepalived高可用双主复制
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/2048899.html
Copyright © 2011-2022 走看看