原问题:在COM组件里经常要加入一些新的类,而调用COM组件的客户程序不知道这些类的具体结构,希望每次在COM加入新类时,客户程序通过读一个配置文件(这个文件中记录着COM中类名称和类中域和方法的名称),就能实例COM中的类,并调用类的方法。请问如何做才能使客户程序在每次COM中加入新类时都不必进行扩展并重新编译?如果COM没有办法,还有没有其他技术可以完成?谢谢回答。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有人说让服务器端支持OLE自动化,客户集成一个脚本引擎就可以了,但我的COM组件和客户程序都是用VC写的啊,能在VC的程序里加入脚本引擎吗?
又有人说做成COM插件,但是如果加入两个新类(例如customer1,customer2)了,我在我的客户程序要做的是把这两个类所对应的两个实例的各个域赋值,例如:customer1.getX()=customer2.getA();customer1.getY()=customer2.getB();........
问题是新加入类之后客户程序如何能知道这个新类有什么方法呢?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有人说让服务器端支持OLE自动化,客户集成一个脚本引擎就可以了,但我的COM组件和客户程序都是用VC写的啊,能在VC的程序里加入脚本引擎吗?
又有人说做成COM插件,但是如果加入两个新类(例如customer1,customer2)了,我在我的客户程序要做的是把这两个类所对应的两个实例的各个域赋值,例如:customer1.getX()=customer2.getA();customer1.getY()=customer2.getB();........
问题是新加入类之后客户程序如何能知道这个新类有什么方法呢?
似乎很难啊。
如果有人可以给出一份完整的方案就利害了。
~~~~~~~~~~~~~~~~~~请问哪里可以找到一个关于它的简单的文档或是示例啊?codeproject上有文章说明
~~~~~~~~~~~~~~~~~~~~~~~刚刚看完它上面COM专栏的文章,没有讲如何加入脚本引擎的啊?
这样客户程序就可以实例化这个新类,并操作他的方法了,但是从配置文件中读入的是字符串啊,字符串信息是无法转化成类信息的啊(例如:char *s="dog";class (*s)并不能得到一个dog实例啊)。
1.利用COM库函数使用代码组件(CoCreateInstance()等函数)
2.通过ClassWizard来使用组件(用类型库)
3.利用#import指令来使用组件(智能指针)
我一般用第二种,有人说第三种服务器改了,客户端可以不改,即是智能的,我没有试过,楼主不妨试一试。是不是这样!!!
你的想法实现了。你甚至可以用脚本实现com组件的开发,看看msdn上的"Writing COM Objects with Scripting Languages".但是实际使用价值不大。