vb.netcom对象 vb属性窗口怎么打开( 二 )


AsmCode(40) = H20938DFC
AsmCode(41) = H52100010
AsmCode(42) = H1493FF50
AsmCode(43) = HB100010
AsmCode(44) = H506674C0
AsmCode(45) = H52EC558D
AsmCode(46) = HFF0C75FF
AsmCode(47) = H101C93
AsmCode(48) = H558D5810
AsmCode(49) = H938D52D8
AsmCode(50) = H10001042
AsmCode(51) = HEC558D52
AsmCode(52) = HBD0FF52
AsmCode(53) = H8D3E75C0
AsmCode(54) = HFF52DC55
AsmCode(55) = H93FF1075
AsmCode(56) = H1000101C
AsmCode(57) = HD8558B50
AsmCode(58) = H8D54128B
AsmCode(59) = H6A50DC45
AsmCode(60) = HD875FF00
AsmCode(61) = HB0C52FF
AsmCode(62) = H8B1575C0
AsmCode(63) = H4D8BFC45
AsmCode(64) = H59018914
AsmCode(65) = H8BD18B51
AsmCode(66) = H52FF5112
AsmCode(67) = H14EB5804
AsmCode(68) = HEB06EB58
AsmCode(69) = HEB02EB0F
AsmCode(70) = HFC75FF0B
AsmCode(71) = H101893FF
AsmCode(72) = HC0331000
AsmCode(73) = H10C2C95B
AsmCode(74) = H6C6C4400
AsmCode(75) = H556E6143
AsmCode(76) = H616F6C6E
AsmCode(77) = H776F4E64
AsmCode(78) = H0
AsmCode(79) = H53EC8B55 ''尝试卸载DLL函数入口
AsmCode(80) = HE8
AsmCode(81) = HEB815B00
AsmCode(82) = H10001155
AsmCode(83) = H1139938D
AsmCode(84) = HFF521000
AsmCode(85) = H93FF0875
AsmCode(86) = H10001014
AsmCode(87) = H1374C00B
AsmCode(88) = HC00BD0FF
AsmCode(89) = H75FF0E74
AsmCode(90) = H1893FF08
AsmCode(91) = H33100010
AsmCode(92) = H4801EBC0
AsmCode(93) = H10C2C95B
AsmCode(94) = H90909000
End Sub
(2)vb.net 通过类厂创建com对象的方法
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,
enuCLSCTX_NO_CODE_DOWNLOAD = 400,
enuCLSCTX_NO_FAILURE_LOG = 4000,
enuCLSCTX_SERVER= (1 | 4 | 16),
enuCLSCTX_ALL= (2 | 1)
} CLSCTX;
[
object,
uuid(B196B28F-BAB4-101A-B69C-00AA00341D07),
pointer_default(unique)
]
interface IClassFactory2 : IClassFactory
{
typedef IClassFactory2 * LPCLASSFACTORY2;
typedef struct tagLICINFO {
LONG cbLicInfo;
BOOL fRuntimeKeyAvail;
BOOL fLicVerified;
} LICINFO;
typedef struct tagLICINFO * LPLICINFO;
HRESULT GetLicInfo(
[out, retval] LICINFO * pLicInfo
);
HRESULT RequestLicKey(
[in] LONG dwReserved,
[out, retval] BSTR * pBstrKey
);
[local]
HRESULT CreateInstanceLic(
[in] IUnknown * pUnkOuter,
[in] IUnknown * pUnkReserved,
[in] GUID* riid,
[in] BSTR bstrKey,
[out, retval, iid_is(riid)] PVOID * ppvObj
);
}
}
用midl编译成IClassFactory2.tlb,并导入到vb.net的工程当中 。

推荐阅读