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

     

    成功~!

     

     

  • 相关阅读:
    C语言学习趣事_19_C参考手册连接
    2_Windows下利用批处理文件获取命令行命令帮助信息
    C语言学习趣事_FILE_TYPE
    清华大学出版社版_Windows程序设计_方敏_不足_3
    Windows程序设计零基础自学_14_Windows文件和目录操作
    3_Windows下利用批处理文件_去除C源代码中指示行号的前导数字
    随想_7_Windows_7_Visual_Studio_2008_问题
    C语言小算法_1_数值转换
    C语言学习趣事_20_Assert_Setjmp
    C语言学习趣事_20_关于数组名与指针的讨论
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/2048899.html
Copyright © 2011-2022 走看看