VBS中需要调用一ActiveX DLL,其工程名为HWin,类名为Win,但发现系统中有2个工程名、类名完全一样类库,一个是我需要的,另一个不是我需要的。用CreateObject("HWin.Win")生成实例时,发现不能正确调用我所需要的类库函数。问:在不删除第二个类库时,有什么办法正确调用我所需要的类库函数?(注意是VBS中调用。)
解决方案 »
- 小问题
- Timer事件无法正常执行的问题
- 向老师们鞠躬:为何我编的程序到了别的机器上字体就小了呢?
- 用vb查询数据库
- VB控件问题
- 用VB的package制作安装程序怎样处理子文件夹中的大量文件问题!
- 大家來幫個忙吧.這樣的報表要怎么做呢?~~~~~~郁悶中
- rs.open StrSql,StrConn,1,1 ;处理一段代码后 set rs=nothing 。此时数据库连接是否断开?
- 数据库查询问题,急!!!有分哟~~ (一个很菜的问题~~)
- 真正的程序员用vc,这对么?如果学过c,那么应该学vb呢还是学vc++?
- 100分敬上,对vb不熟悉,麻烦写个asp的dll组件,实现读取硬盘卷序列号
- 请问这样的算法程序要怎么写?
另外,由于你的工程名和类名都完全相同了,那么可以“HWin.Win”查看一下注册表,看它们是否有区别,比如有时编译器为了区别版本,而自动加上HWin.Win.1之类的字样,这样一来,也可以正确调用。
根据CoCreateInstance 关键字查到用法如下:
Option Explicit
Private Type GUID
data1 As Long
data2 As Integer
data3 As Integer
data4(7) As Byte
End Type
Private Const S_OK As Long = &H0
Private Declare Function CoCreateInstance Lib "ole32.dll" (clsid As GUID, ByVal pUnkOuter As Long, ByVal dwClsContext As Long, riid As GUID, pvObj As Any) As Long
Private Const CLSCTX_INPROC_SERVER As Long = &H1
Private Declare Function IIDFromString Lib "ole32.dll" (ByVal lpszIID As Long, iid As GUID) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpszCLSID As Long, clsid As GUID) As Long
Sub main()
Dim shApp As Object
Dim clsid As GUID, iid As GUID
Const IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}"
Const CLSID_IShell As String = "{13709620-C279-11CE-A49E-444553540000}"
'以下三条语句用来创建Shell.Application接口实例,
' 相当于VB中Set shApp=CreateObject("Shell.Application")语句
If IIDFromString(StrPtr(IID_IDispatch), iid) <> S_OK Then Exit Sub
If CLSIDFromString(StrPtr(CLSID_IShell), clsid) <> S_OK Then Exit Sub
If CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, iid, shApp) <> S_OK Then Exit Sub
'用VB的方式调用接口的一个属性
MsgBox shApp.Windows.Count
'释放接口
Set shApp = Nothing
End Sub 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2009/07/14/4345974.aspx