用vb查找dll控件的guid值

TsungLee 2006-10-25 11:25:56
请问怎么样查找一个dll控件在注册表里的guid值?
...全文
278 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TsungLee 2006-10-25
  • 打赏
  • 举报
回复
编译时报错:“变量使用了 Visual Basic 不支持的自动化类型”
TsungLee 2006-10-25
  • 打赏
  • 举报
回复
怎么用??
迈克揉索芙特 2006-10-25
  • 打赏
  • 举报
回复
Option Explicit
Private Type UUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal lpszProgID As Long, pClsid As GUID) As Long
Private Declare Sub ProgIDFromCLSID Lib "ole32.dll" (CLSID As GUID, lplpszProgID As Long)
Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpszProgID As Long, pClsid As GUID) As Long
Private Declare Function StringFromCLSID Lib "ole32.dll" (pClsid As UUID, lpszProgID As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Public Function CLSIDToProgID(ByVal CLSID As String) As String
Dim UUID As UUID
Dim ProgID As Long
Dim StrOut As String * 255

CLSIDFromString StrPtr(CLSID), UUID
ProgIDFromCLSID UUID, ProgID
If ProgID <> 0 Then
StrFromPtrW ProgID, StrOut
CLSIDToProgID = Left(StrOut, InStr(StrOut, vbNullChar) - 1)
End If
End Function

Public Function ProgIDToCLSID(ByVal ProgID As String) As String
Dim UUID As UUID
Dim CLSID As Long
Dim StrOut As String * 255

CLSIDFromProgID StrPtr(ProgID), UUID
StringFromCLSID UUID, CLSID
If CLSID <> 0 Then
StrFromPtrW CLSID, StrOut
ProgIDToCLSID = Left(StrOut, InStr(StrOut, vbNullChar) - 1)
End If
End Function

Private Sub StrFromPtrW(pOLESTR As Long, StrOut As String)
Dim ByteArray(255) As Byte, i As Integer
Dim intTemp As Integer, intCount As Integer

intTemp = 1
While intTemp <> 0
MoveMemory intTemp, ByVal pOLESTR + i, 2
ByteArray(intCount) = intTemp
intCount = intCount + 1
i = i + 2
Wend
MoveMemory ByVal StrOut, ByteArray(0), intCount
End Sub
TsungLee 2006-10-25
  • 打赏
  • 举报
回复
果然是强
迈克揉索芙特 2006-10-25
  • 打赏
  • 举报
回复
把上面的API声明替换为:
Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal lpszProgID As Long, pClsid As UUID) As Long
Private Declare Sub ProgIDFromCLSID Lib "ole32.dll" (CLSID As UUID, lplpszProgID As Long)
Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpszProgID As Long, pClsid As UUID) As Long
Private Declare Function StringFromCLSID Lib "ole32.dll" (pClsid As UUID, lpszProgID As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

然后:
Private Sub Command1_Click()
MsgBox ProgIDToCLSID(控件的ProgID)
End Sub
内容概要:本文档围绕“风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真”展开,系统介绍了采用虚拟同步发电机(VSG)控制策略的风电与储能联合并网系统的建模与仿真方法。通过Simulink平台构建完整的电力系统动态模型,重点实现VSG的关键控制逻辑,以提升新能源并网的稳定性、惯性响应与频率支撑能力。文档不仅涵盖核心仿真模型,还整合了大量相关前沿研究内容,如混合储能调频、微电网优化、电动汽车可调能力评估、智能算法在电力系统中的应用等,并提供丰富的Matlab/Simulink代码实例,具有较强的科研复现价和技术参考意义。; 适合人群:具备电力系统基础理论知识和Matlab/Simulink仿真能力的研究生、科研人员及从事新能源发电、储能控制、智能电网等领域工作的工程技术人员;特别适用于正在开展风储协同控制、虚拟同步机、构网型变流器等相关课题研究的高校师生。; 使用场景及目标:① 深入理解虚拟同步发电机(VSG)在风储并网系统中的控制原理与技术优势;② 借助提供的仿真模型与代码完成科研论文复现、算法验证与系统性能测试;③ 探索新能源高渗透背景下提升电网稳定性的关键技术路径,包括惯量模拟、一次频率响应、储能协同控制等。; 阅读建议:建议读者按照文档结构循序渐进地学习,优先下载并运行配套的Simulink模型与Matlab代码,结合VSG控制策略的设计细节进行调试与分析,同时可关注公众号“荔枝科研社”获取完整资源包及持续的技术支持,以提升科研效率与创新能力。

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧