vb.net中要创立com对象可以用new或者CreateObject,就像C++中的CoCreateInstance,一步调用就直接创建了com对象。在它们之中包括了对CoGetClassObject和CreateInstance的调用。默认使用的类厂是IClassFactory。
一般情况下,new或CreateObject已经够用了。但是如果我们的com组件增加了授权,也就是使用了IClassFactory2接口。那么在vb中继续用这种方法就不能创建我们所需要的组件了。我们必须使用IClassFactory2。
在C++中实现很简单。只需要通过CoGetClassObject获得IClassFactory2接口,然后调用它的CreateInstanceLic来创建组件。
因此,在vb.net中,我们就可以仿照c++中的方法。下面是相关代码:
首先声明IClassFactory2的接口。IClassFactory2.idl如下:
[
uuid(6ED6AF97 - F279 - 4d57 - A392 - 0B8ACF89426C),
version( 1.0 ),
helpstring( " INVENTOROCIDL Type Library 1.0 " )
]
library INVENTOROCIDL
... {
interface IClassFactory2;
typedef enum enuCLSCTX
...{
enuCLSCTX_INPROC_SERVER = 1,
enuCLSCTX_INPROC_HANDLER = 2,
enuCLSCTX_LOCAL_SERVER = 4,
enuCLSCTX_REMOTE_SERVER = 16,
uuid(6ED6AF97 - F279 - 4d57 - A392 - 0B8ACF89426C),
version( 1.0 ),
helpstring( " INVENTOROCIDL Type Library 1.0 " )
]
library INVENTOROCIDL
... {
interface IClassFactory2;
typedef enum enuCLSCTX
...{
enuCLSCTX_INPROC_SERVER = 1,
enuCLSCTX_INPROC_HANDLER = 2,
enuCLSCTX_LOCAL_SERVER = 4,
enuCLSCTX_REMOTE_SERVER = 16,