C#调用手动编写的COM组件(非ATL向导生成,参考上一篇手把手写COM组件)

C#调用手动编写的COM组件

(非ATL向导生成,参考上一篇手把手写COM组件)


手动创建一个非ATL向导生成的COM组件,添加的接口定义文件MyIDL.idl代码如下:(修改自“COM原理与应用源代码\ch3\DictComp\"例子)

import "oaidl.idl";
import "ocidl.idl";
#include <olectl.h>
typedef unsigned short *String;

[
object,
uuid(7A8B9348-B427-45A0-9BE8-E3E6978A1ECA),
helpstring("interface IAdd is used for implementing a super-fast addition Algorithm")
]

interface IDictionary : IUnknown
{
    HRESULT Initialize();
	HRESULT LoadLibrary(String);
	HRESULT InsertWord(String, String);
	HRESULT  DeleteWord(String) = 0;
	HRESULT LookupWord(String, String *);
	HRESULT RestoreLibrary(String);
	HRESULT  FreeLibrary();
};

[
object,
uuid(855F837A-BC5E-47E2-AD94-87614C76BC52),
helpstring("interface  IFileIO is used for enabling the COM object to log the operations to a file.")
]

interface ISpellCheck : IUnknown
{
    //
    HRESULT     CheckWord(String, String*);
};

// {013D57F2-78E8-49BF-8F86-EE128CD68966}
// static const GUID <<名称>> = 
// { 0x13d57f2, 0x78e8, 0x49bf, { 0x8f, 0x86, 0xee, 0x12, 0x8c, 0xd6, 0x89, 0x66 } };

[
uuid(013D57F2-78E8-49BF-8F86-EE128CD68966),
helpstring("Interfaces for Code-Guru algorithm implementations .")
]

library CodeGuruMathLib
 {
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

    interface IDictionary;
    interface ISpellCheck;
}

编译后生成DictComp.tlb类型库文件。之后一直找不到在C#中使用的方法,于是,在论坛发帖问 http://bbs.csdn.net/topics/391914099过之后,又在谷歌中找到了一些说明 http://stackoverflow.com/questions/5834100/import-tlb-into-c-sharp。见下图。注意,工具的路径,操作完提示成功。




之后在C#项目中添加引用,tlb文件就可以用了。项目源码地址:供参考


C#引用后,如图。





现在还存在的问题是:

导出的类是接口,(抽象类,还没实现函数功能,而已经实现功能的类,没法在C#中使用)。

怎么在C#中调用COM,比如像C++调用一样。能使用COM接口函数如:DllGetClassObject来创建和使用COM组件。如果谁知道,请留言告诉我





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值