2009-06-02 77 views
2

我正在做一些考古学,处理COM +如何调用com +组件?

我设法争取一个简单的COM DLL作为一个COM +组件,到目前为止,一切顺利。

所以我有这个'foobar'com +组件,它的接口和我想调用的方法。

我的问题很简单:我该如何打电话给这个组件?

任何.NET或VB6的答案被接受(我要检查的部件是确定的,不关心客户端)

感谢

编辑(09年6月3日):嗯,我很困惑。为了正常工作,我的COM +组件需要它的注册。为什么不?但是,那么,如何确定我正在进行COM +调用,而不是COM呢?

回答

1

如果所有你想要的是在被调用时检查组件响应,然后使用快速VBScript而不是在VB6/VB.NET中构建某些东西。

Dim o : Set o = CreateObject("Lib.Class") 
o.YourMethod "someParam" 

关注您的COM +应用程序组件服务,看是否请求的类旋转起来。

+0

非常感谢,它的工作完美 – Vinzz 2009-06-03 07:32:50

+0

错误...其实,不,我的香草COM DLL已注册,它回答我的电话,而不是COM +组件 – Vinzz 2009-06-03 07:38:48

+1

在COM组件注册后,您应该将DLL拖到组件服务中的COM +应用程序中。然后,COM +将修复注册表项以指导CreateObject调用。您正在使用服务器应用程序而不是图书馆应用程序吗? – AnthonyWJones 2009-06-03 08:24:29

2

最简单的VB.NET代码片断可能:

Dim myCom As Object 
myCom = CreateObject("MyCom.ProgId") 
myCom.Method(parms) 

您需要替换“MyCom.ProgId”与您的组件的实际进程id - 你可以从组件的属性的常规选项卡获得此在组件服务管理工具(听起来像你已经得到了一个把握)

myCom.Method(PARMS)

简直是要调用任何方法的占位符,与参数方法需要。

下面是VB.NET的语法的一些实例链接:

http://msdn.microsoft.com/library/de...eateObject.asp

http://www.samspublishing.com/articl...le.asp?p=25857

http://msdn.microsoft.com/library/en...asp?frame=true

+0

您的链接似乎已死,但无论如何感谢您的洞察力。我现在缺乏的一种方式是引用COM +组件,以便能够编译我的客户端 – Vinzz 2009-06-03 07:35:18

+0

当您迟到绑定时,不需要对COM组件进行引用 - 这是我的代码示例中的语法。运行时将通过ProgId字符串查找组件,加载到内存中,然后尝试调用代码中的方法。 如果尝试调用不存在的方法或传递错误的参数,这可能会创建一些以前未曾见过的新运行时错误。早期绑定可以防止这些类型的错误,编译器会捕获它们。 – Adam 2009-06-03 16:59:39

1

亚当在VB6的代码是相似的:

Dim myCom As Object 
Set myCom = CreateObject("MyCom.ProgId") 
myCom.Method(parms 

这个例子后期将会受到一些表现的惩罚。 你可以以早期的方式调用你的方法,避免处罚。在这两种VB6或VB.NET,只是COM + DLL添加到您的参考,你可以调用以这种方式对象:

VB6

dim myCom as MyCom.ProgId 
set myCom = new MyCom.ProgId 
myCom.Method 

VB.NET

dim myCom as new MyCom.ProgId 
myCom.Method(...) 
+0

谢谢,但我必须提供某种参考以编译此项目,对不对?我怎样才能对COM +组件进行引用? – Vinzz 2009-06-03 07:33:40

+0

COM +组件与COM组件相同,只是具有额外的事务性goo,因此您可以用同样的方式引用它。在VB6中,转到Project/References菜单。在VB.NET中,右键单击解决方案资源管理器中的项目,然后选择添加引用... – AngryHacker 2009-06-03 21:12:00

1

当你想使用COM +的RMI然后用这个

Dim o As Object 
Set o = CreateObject("Lib.Class", "MYSERVER") 

其中myserver是在其中创建COM +应用程序和DLL注册计算机名称。随后

o.YourMethod "someParam" 

将被远程调用。如果您仅使用自动化兼容接口,COM +将成功为RMI创建代理。否则,您需要在客户机上提供typelib。这可以是一个单独的TLB或DLL本身。

+0

@Herbrich:这是VB6代码。没有'CreateObject'的用户/传递参数 – wqw 2014-06-14 21:02:41