• 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

     

    成功~!

     

     

  • 相关阅读:
    性能测试二十五:redis-cli 命令总结
    性能测试二十四:环境部署之Redis多实例部署
    性能测试二十三:环境部署之Redis安装和配置
    性能测试二十二:环境部署之Nginx
    性能测试二十一:环境部署之mysql
    性能测试二十:环境部署之Tomcat多实例部署+日志监控
    性能测试十九:jmeter参数优化+排错
    性能测试十八:jmeter分布式
    性能测试十七:liunx下jmeter结果报表、html报表
    性能测试十六:liunx下jmete配置环境变量
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/2048899.html
Copyright © 2020-2023  润新知