我用C#写了个com,想在vb里面使用,但是我的类是单例(singleton)模式的,也就是说不能直接new一个对象,只能通过调用类的一个静态方法geInstance来获得一个实例,可是在VB里面应该怎么调用com里面一个类的静态方法?

解决方案 »

  1.   

    静态方法可以直接用函数名调用的就像GetObject函数一样
      

  2.   

    dim COM名 as  ---
    set ***** as  new   ++++对不起,忘了怎样下了
    好像是先要为你写的COM创建一个对象
    然后调用这个对象
    你试一下
    仅供参考(我的VB坏了)
      

  3.   

    先用getobject之类的语句实例化对象,然后调用对象的某个方法不行吗?
      

  4.   

    GetObject是做不到的,必须用CreateObject方法
    如果你是“不可创建的单实例”,那么你就必须要用你的C先在内存中创建实例,然后再调用CreateOBject.如果还不行,把你的DLL发过来,我帮你试验。
    [email protected]
      

  5.   

    //GetObject是做不到的,必须用CreateObject方法GetObject的pathname为vbnullstring时等价于CreateObjectGetObject 函数  语言参考 
    版本 2 
     请参阅 
    --------------------------------------------------------------------------------描述
    返回对文件中 Automation 对象的引用。 
    语法
    GetObject([pathname] [, class]) 
    GetObject 函数的语法有以下参数: 参数 描述 
    pathname 可选。字符串,包含待检索对象的文件的完整路径和名称。如果省略 pathname 则必须有 class。 
    class 可选。字符串,对象的类。 
    class 参数的语法格式为 appname.objectype,其中包括以下部分: 部分 描述 
    appname 必选。字符串,提供对象的应用程序名称。 
    objectype 必选。字符串,要创建的对象的类型或类。 说明
    使用 GetObject 函数可以访问文件中的 Automation 对象,而且可以将该对象赋值给对象变量。使用 Set 语句将 GetObject 返回的对象赋值给对象变量。例如: Dim CADObject
    Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")在执行上述代码时,就会启动与指定路径名相关联的应用程序,同时激活指定文件中的对象。如果 pathname 是零长度字符串 (""),GetObject 返回指定类型的新对象实例。如果省略 pathname 参数,GetObject 将返回指定类型的当前活动对象。如果没有指定类型的对象,就会出现错误。 
    某些应用程序允许只激活文件的一部分,方法是在文件名后加上一个惊叹号 (!) 以及用于标识要激活的文件部分的字符串。有关创建这种字符串的详细信息,请参阅创建对象的应用程序的有关文档。 例如,在绘图应用程序中,一个存放在文件中的图可能有多层。可以使用下述代码来激活图 SCHEMA.CAD 中的某一层: 
    Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")如果没有指定对象的类,则 Automation 会根据所提供的文件名,确定要启动的应用程序以及要激活的对象。但是,有些文件可能支持多个对象类。例如,图可能支持三种不同类型的对象:Application 对象、Drawing 对象和 Toolbar 对象,所有这些都是同一个文件中的一部分。使用可选的 class 参数可以指定文件中要激活的对象。例如: Dim MyObject
    Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")
    在上述样例中,FIGMENT 是绘图应用程序的名称,而 DRAWING 则是它支持的一种对象类型。对象被激活之后,就可以在代码中使用所定义的对象变量来引用它。在前面的例子中,可以使用对象变量 MyObject 访问新对象的属性和方法。例如: 
    MyObject.Line 9, 90
    MyObject.InsertText 9, 100, "嗨,你好!"
    MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
    --------------------------------------------------------------------------------
     
    注意 在对象的当前实例存在,或者要用已加载的文件创建对象时,请使用 GetObject 函数。如果没有当前实例,并且不准备使用已加载的文件启动对象,请使用 CreateObject 函数。 如果对象已注册为单个实例的对象,则无论执行多少次 CreateObject,都只能创建该对象的一个实例。若使用单个实例对象,当使用零长度字符串 ("") 语法调用时,GetObject 总是返回同一个实例,而如果省略 pathname 参数,则会出现错误。