易语言在这方面似乎没有相关的内容 在易语言中实现这个功能并不是那么容易 不过有相类似的工程的托管至“can you refer to: https://github.com/liulilittle/E2CCOM”
你可以查看它的一个底层实现 虽然是用VC写的
易语言静态创建COM从意义上并不大 它只可以解决在不注册一个COM类型库到系统ROT时 可以成功创建这个对象 但它的局限性实际上并不小 你无法通过ProgID创建一个有效的COM对象 当然这只是说在此模块的支持上 如果需要支持ProgID静态创建COM对象的话 这需要从COM/TLB类型库中着手 但显然会很麻烦即便在易语言中实现上述功能也不是那么容易的。
在附带的DEMO中 使用一个在众多易语言程序开发中所经常利用到一个COM类库“大漠插件”吧 如果需要在运行时查看COM对象的函数可以参考我的这篇帖子内的一个信息 如何在易语言中枚举COM对象的方法?
变量名 | 类 型 | 静态 | 数组 | 备 注 | dm | 对象 | | | hWnd | 整数型 | | | ShellExecuteA ( #NULL, “open”, “notepad.exe”, “”, “”, #SW_NORMAL )如果真 (CoCreateInstance (“dm.dll”, “{26037A0E-7CBD-4FFF-9C63-56F2D0770214}”, dm )) hWnd = dm. 数值方法 (“FindWindow”, “”, “记事本”)如果真 (hWnd ≠ #NULL )dm. 方法 (“SetWindowText”, hWnd, “你好,世界!”)dm.查看 ()返回 (0)
在DEMO中的代码写的非常简单易懂,使用ShellExecuteA函数打开一个“记事本”可执行程序 调用“CoCreateInstance”函数从“dm.dll”中创建一个COM对象 然后调用“大漠插件”中的函数“模糊查找记事本窗口句柄”在修改记事本窗口的标题 最后调用DEBUG下查看COM对象的函数 整个流程行云流水简单至极~~
//
//
那么在“CoCreateInstance”函数中有一个__clsid的参数你可以不知道它是做什么用的 它实际上是标识在COM类型库中一个具体的“COM对象实现类” 我们在调度一个对象时是通过“COM接口”在调用它的成员
在上图中你可以看到下面这么一系列话 这实际上是对COM对象实现类型的一个声明
[
uuid(26037A0E-7CBD-4FFF-9C63-56F2D0770214),
helpstring("dmsoft Class")
]
coclass dmsoft {
[default] interface Idmsoft;
};
在coclass上部分即[]内的内容,helpstring标识在类型库中留下可以被反射读取的信息(顾名思义只做一个代码阅读帮助用途)但uuid的话就不太一样了哦 它在这里是标识此实现对象的GUID 但在COM中称CLSID 那么这些CLSID在未编译器前代码中到底是如何声明的?
[__declspec(uuid("26037A0E-7CBD-4FFF-9C63-56F2D0770214"))]
__interface IFoo : public IDispatch {
// TD:OD
}
那么在C#中是如何声明的?
[ComVisible(true), Guid("26037A0E-7CBD-4FFF-9C63-56F2D0770214")]
public interface IFoo {
// TD:OD
}
//
那么如何通过工具查看一个COM类库的信息呢?你可以使用OLEVIEW工具它是一个令人惊讶的COM类型库信息查看工具 但显然只讨论如何查看一个未被注册COM类库中的信息
你需要先打开OLEVIEW工具,点击“File”菜单然后选择"View TypeLib..."菜单项后会弹出“文件打开对话框”FileOpenDialog 此时你只需要找到需要被查看的COM类型库文件 如“dm.dll”。
// C.C
一个有效的示例代码:
demo.rar
(634.67 KB, 下载次数: 207)
|