VC调用C#写的COM+组件

 首先对COM+组件的写法需要注意以下几点:

1.接口,事件,方法,属性必须是public,

2.方法和属性必须在接口中声明,事件也必须在事件接口中声明.

否则将在VC中无法调用,在接口中声明主要是为了在COM 中的vtab中.

3.必须对接口中的方法,属性,事件前声明[DispId(1)]

4.每个接口都必须有一个GUID

5.而且项目一定需要是COM Interop,并且具有强命名

示例:

//接口声明

[Guid("694C1820-04B6-4988-928F-FD858B95C880")]
    public interface DBCOM_Interface
    {
        [DispId(1)]
        void Init(string userid , string password);
        [DispId(2)]
        bool ExecuteSelectCommand(string selCommand);
        [DispId(3)]
        bool NextRow();
        [DispId(4)]
        void ExecuteNonSelectCommand(string insCommand);
        [DispId(5)]
        string GetColumnData(int pos);
    }

 // // 事件接口声明
    [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface DBCOM_Events
    {
    }

//对于实现类的声明

    [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")]
    ClassInterface(ClassInterfaceType.None),                   

 //不产生类接口,如果需要产生声明为ClassInterfaceAttribute
    ComSourceInterfaces(typeof(DBCOM_Events))]        

  //声明产生一个COMSource的事件列表
    public class DBCOM_Class : DBCOM_Interface
    {

    }

在VC中的调用方法如下:

在VC++中进行组件调用的步骤(以DBCOM.tlb为例):

1、在头文件中导入类型库tlb 

#import “DBCOM.tlb” 

2、初始化COM以及产生智能指针(一般是在需要调用COM组件中提供的方法时就需要产生指向该接口的智能指针) 

CoInitialize(NULL);//初始化COM 

DBCOM::DBCOM_Interface p((__uuidof(DBCOM::DBCOM_Class ))); //名字空间::接口Ptr p((__uuidof(名字空间::类))) 

DBCOM::DBCOM_Interface * Test=p; //名字空间::接口 指向接口的智能指针

3、调用COM中的方法

 _bstr_t m_string=”select * from user”; //传入参数

bool bRet=Test-> ExecuteSelectCommand(m_string);//调用ExecuteSelectCommand方法

4、释放环境

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值