vb做的activex控件如何指定classid?或者能保持第一次的classid不变呢?
解决方案 »
- 数据传输的问题
- 延时问题
- 如何制作一个二进制文本查看器?
- 急救
- 如何实现资源管理器中的那个combox?就是有图标的那个???绝对高分
- 1500美元求一个隐藏的远程控制软件
- 如何判断服务器上的log.txt是否存在?
- 我有好菜,在线提问:如何让DO。。。LOOP循环五秒
- 有必要买正版软件吗?比如VB和SQL SERVER2000。进来有分,呵呵
- 请问:我用ADODC控件的RECORDSET的FIND方法查找:adodc1.recordset.find "用户='无名'",运行时提示“对象变量或 With 块变量没有设置”,不知为何!
- vb.net 的运行环境是什么?
- DataEnvironment问题
为了获得原来的CLSID,你需要引用 "TypeLib Information",位于 C:\Windows\System32\TLBINF32.DLL
Option ExplicitPublic Function ReplaceGUIDInFile(ByVal sFileName As String, _
ByVal sGUIDOld As String, _
ByVal sGUIDNew As String, _
ByVal bReplace As Boolean) As Boolean Dim sText As String 'File string
Dim sOld As String 'Search string
Dim sNew As String
Dim pos As Long sOld = strGUIDtoMemory(sGUIDOld)
sNew = strGUIDtoMemory(sGUIDNew)
sText = BinaryFile_Read_VB(sFileName)
'Note: Hex(pos) returned by InstrB agrees with location when opening OCX with UltraEdit in Hex mode.
pos = InStrB(1, sText, sOld, vbBinaryCompare)
Do While pos > 0
Debug.Print "Match at Hex", Hex(pos)
If bReplace Then
sText = Replace(sText, sOld, sNew) 'Note: This replaces both occurences in OCX/DLL
BinaryFile_Write_VB sFileName, sText
End If
pos = InStrB(pos + 1, sText, sOld, vbBinaryCompare)
LoopEnd Function'Note: Rearrange bytes for memory search/replace.
'Long/Integer byte values are reversed.
Private Function strGUIDtoMemory(ByVal sGUID As String) As String
Dim b(15) As Byte
Dim i As Long
Dim lChar As Long 'Strip curly brackets and separator
sGUID = Replace(sGUID, "{", "")
sGUID = Replace(sGUID, "}", "")
sGUID = Replace(sGUID, "-", "") 'Original File Type Comments
'-------- -------- ------- --------
'2AEF8139 3981EF2A Long Reversed
'B732 32B7 Integer Reversed
'4B9E 9E4B Integer Reversed
'AFB2 AFB2 Byte Normal
'7A94F1E616F5 7A94F1E616F5 Byte Normal 'Rearrange bytes for memory search/replace
'From 2AEF8139B7324B9EAFB27A94F1E616F5
'To 3981EF2A32B79E4B + AFB27A94F1E616F5
sGUID = Mid(sGUID, 7, 2) & _
Mid(sGUID, 5, 2) & _
Mid(sGUID, 3, 2) & _
Mid(sGUID, 1, 2) & _
Mid(sGUID, 11, 2) & _
Mid(sGUID, 9, 2) & _
Mid(sGUID, 15, 2) & _
Mid(sGUID, 13, 2) & _
Mid(sGUID, 17) 'Populate 16 byte array with sGUID values
For i = 1 To Len(sGUID) - 1 Step 2
lChar = "&H" & Mid(sGUID, i, 2)
'Debug.Print i \ 2, Hex(lChar)
b(i \ 2) = lChar
Next 'Convert byte array to string.
strGUIDtoMemory = bEnd FunctionPublic Function BinaryFile_Read_VB(ByVal sFileName As String) As String Dim FF As Long
Dim b() As Byte On Error Resume Next FF = FreeFile
Open sFileName For Binary Access Read As FF
ReDim b(LOF(FF) - 1)
Get FF, , b
Close FF
BinaryFile_Read_VB = bEnd FunctionPublic Sub BinaryFile_Write_VB(ByVal sFileName As String, ByVal sText As String) Dim FF As Long
Dim b() As Byte On Error Resume Next
Kill sFileName
On Error GoTo 0
FF = FreeFile
Open sFileName For Binary Access Write As #FF
b = sText
Put #FF, , b
Close #FF
End Sub
Public Function GetLCIDFromFile(ByVal sPath As String) As String
Dim m_cTLI As TypeLibInfo
Set m_cTLI = TLI.TypeLibInfoFromFile(sPath)
GetLCIDFromFile = m_cTLI.LCID
End Function
'应用:
Dim sFileName As String
sFileName = "C:\MyControls\Release\vbalIml6_EDA1811C.ocx"ReplaceGUIDInFile sFileName, _
GetLCIDFromFile(sFileName), _
"{DFF6AA8E-1EC0-4026-B7F5-61555D9DDB8B}", _
True)[/code]