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

     

    成功~!

     

     

  • 相关阅读:
    API文档大集合
    jenkins 构建 job 并获取其状态的实现
    jenkins 插件乱码处理与文件上传
    更优雅的配置:docker/运维/业务中的环境变量
    部署仓库中 nginx 下游依赖配置改进
    dotnet core 在 MIPS64 下的移值进度:EA 版本已经发布
    tmux 编译安装过程
    各数据源的时间/日期的提取能力对比
    关于若干性能指标的阐述
    为缓存、外部接口调用添加超时处理
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/2048899.html
Copyright © 2011-2022 走看看