VB.NET调用VB6封装在OCX控件中的函数

将功能函数封装于OCX之中在VB6平台上可以简单化,在默认模板中直接考贝贴入那些函数即可。在博文【将《VB6编程IEEE浮点算法实践》中的Function封装成OCX】将《VB6编程IEEE浮点算法实践》中的Function封装成OCX_Mongnewer的博客-CSDN博客中对VB6的OCX封装做了具体实践。

下面是全部功能函数代码,便于后期调用参考。CRC16是在CDSN上参考的,找不到是在哪篇博文了,有知道告诉我,我将出处贴到代码上。

Function MKI(ByVal iData As Integer) As String'MKI 16bits &HFFFF -32768 to 32767 8000-7fffDim inData As LongDim HiByte As Long, LoByte As LonginData = Fix(iData)If inData < 0 Then inData = inData + 65536LoByte = inData And &HFFHiByte = (inData \ 2 ^ 8) And &HFFMKI = Right$(("0" + Hex$(HiByte)), 2) + Right$(("0" + Hex$(LoByte)), 2)
End Function
Function MKL(ByVal lData As Long) As String'MKL 32bits &HFFFFFFFF    -2147483648 to 2147483647    80000000 to 7fffffff'Dim HiWord As Long, LoWord As Long'Dim inData As Long'LoWord = inData And &HFFFF'HiWord = (inData \ 2 ^ 4) And &HFFFF'MKL = Right$(("0000" + Hex$(HiWord)), 4) + Right$(("0000" + Hex$(LoWord)), 4)Dim Phi4 As Currency, Phi3 As Currency, Phi2 As Currency, Phi1 As Currency, inData As CurrencyinData = Fix(lData)Phi4 = inData And &HFFPhi3 = (inData \ 2 ^ 8) And &HFFPhi2 = (inData \ 2 ^ 16) And &HFFPhi1 = (inData \ 2 ^ 24) And &HFFMKL = Right$(("0" + Hex$(Phi1)), 2) + Right$(("0" + Hex$(Phi2)), 2) + Right$(("0" + Hex$(Phi3)), 2) + Right$(("0" + Hex$(Phi4)), 2)
End Function
Function MKS(ByVal sData As Single) As String'********************************************************************************'* Single singn=1bit, exp= 8bits, tail=23bits, total=32bits, offset=  7F 127    *'* Double singn=1bit, exp=11bits, tail=52bits, total=64bits, offset= 3FF 1023   *'* DblEXT singn=1bit, exp=15bits, tail=64bits, total=80bits, offset=3FFF 16383  *'********************************************************************************Dim inDataSingn As ByteDim inData As SingleDim ipart As Long, npart As Byte, fpart As SingleDim tipart As Long, tnpart As Byte, tfpart As SingleDim AcuFactor As Byte, iDataExp As Integer, MoveDotPoint As Byte, ReIndex As ByteDim TempData1(79) As Byte, TempData2(79) As Byte, TempData3(79) As Byte, TempData4(79) As Byte, TempData5(79) As ByteDim IntiStr As String, FracStr As StringDim TempData As Integer, TempString As StringDim TempByte As Byte, OffSet As Integer, OffSetBits As ByteDim CaseID As Integer, I As IntegerDim CRC16 As Long, CRC16Str As StringOffSetBits = 8AcuFactor = 32: OffSet = 127inData = sDatainDataSingn = 0If inData < 0 Then inDataSingn = 1inData = Abs(inData)    'ignore singnipart = Int(inData): fpart = (inData - ipart)If inData = 0 ThenCaseID = 0Else'Convert ipart, the integer part, into byte array TempData1 MSB to LSBtipart = ipart: TempString = ""For I = 1 To AcuFactorTempString = Right$(Str$(tipart And &H1), 1) + TempStringtipart = tipart \ 2 ^ 1Next IFor I = 1 To AcuFactorIf Mid$(TempString, I, 1) = "1" Then Exit ForMid$(TempString, I, 1) = " "Next IIntiStr = Trim(TempString)'Convert fpart, the fraction part, into byte array TempData2tfpart = fpart: TempString = ""For I = 1 To AcuFactorIf tfpart = 0 Then Exit Fortfpart = tfpart * 2tnpart = Int(tfpart): tfpart = tfpart - tnpartTempString = TempString + Right$(Str$(tnpart And &H1), 1)Next IFracStr = TempStringIf ipart > 0 Then CaseID = 1If ipart = 0 Then CaseID = 2End IfSelect Case CaseIDCase 0TempByte = 0TempString = Right$((String(AcuFactor, "0") + Hex$(TempByte)), AcuFactor / 4)MKS = TempStringCase 1  'Data with integer partFor I = 1 To Len(IntiStr)If Mid$(IntiStr, I, 1) = "1" Then Exit ForNext IMoveDotPoint = Len(IntiStr) - IiDataExp = MoveDotPoint + OffSet'Now Sign, Exp and Fracpart readyTempData = iDataExpTempString = ""For I = 1 To OffSetBitsTempString = Right$(Str$(TempData And &H1), 1) + TempStringTempData = TempData \ 2 ^ 1Next I'Sign and ExponentCRC16Str = Trim(Str$(inDataSingn)) + Right$(TempString, OffSetBits)'Make full string and omit first "1"TempString = IntiStr + FracStrTempString = Right$(TempString, Len(TempString) - 1)CRC16Str = Left$((CRC16Str + TempString + String(AcuFactor, "0")), AcuFactor)TempString = ""For I = 1 To AcuFactor Step 4TempByte = 0TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 3, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 2, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 1, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 0, 1)))TempString = TempString + Hex$(TempByte)Next IMKS = TempStringCase 2  'Data without integer partFor I = 1 To Len(FracStr)If Mid$(FracStr, I, 1) = "1" Then Exit ForNext IMoveDotPoint = IiDataExp = -1 * MoveDotPoint + OffSet'Now Sign, Exp and Fracpart readyTempData = iDataExpTempString = ""For I = 1 To OffSetBitsTempString = Right$(Str$(TempData And &H1), 1) + TempStringTempData = TempData \ 2 ^ 1Next ITempString = Right$(TempString, OffSetBits)'Sign and Exponent, and FracPartCRC16Str = Trim(Str$(inDataSingn)) + Trim(TempString) + Right$(FracStr, Len(FracStr) - MoveDotPoint)TempString = ""For I = 1 To AcuFactor Step 4TempByte = 0TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 3, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 2, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 1, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 0, 1)))TempString = TempString + Hex$(TempByte)Next IMKS = TempStringEnd Select
End Function
Function MKD(ByVal sData As Double) As String'********************************************************************************'* Single singn=1bit, exp= 8bits, tail=23bits, total=32bits, offset=  7F 127    *'* Double singn=1bit, exp=11bits, tail=52bits, total=64bits, offset= 3FF 1023   *'* DblEXT singn=1bit, exp=15bits, tail=64bits, total=80bits, offset=3FFF 16383  *'********************************************************************************Dim inDataSingn As ByteDim inData As DoubleDim ipart As Long, npart As Byte, fpart As DoubleDim tipart As Long, tnpart As Byte, tfpart As DoubleDim AcuFactor As Byte, iDataExp As Integer, MoveDotPoint As Byte, ReIndex As ByteDim TempData1(79) As Byte, TempData2(79) As Byte, TempData3(79) As Byte, TempData4(79) As Byte, TempData5(79) As ByteDim IntiStr As String, FracStr As StringDim TempData As Integer, TempString As StringDim TempByte As Byte, OffSet As Integer, OffSetBits As ByteDim CaseID As Integer, I As IntegerDim CRC16 As Long, CRC16Str As StringOffSetBits = 11AcuFactor = 64: OffSet = 1023inData = sDatainDataSingn = 0If inData < 0 Then inDataSingn = 1inData = Abs(inData)    'ignore singnipart = Int(inData): fpart = (inData - ipart)If inData = 0 ThenCaseID = 0Else'Convert ipart, the integer part, into byte array TempData1 MSB to LSBtipart = ipart: TempString = ""For I = 1 To AcuFactorTempString = Right$(Str$(tipart And &H1), 1) + TempStringtipart = tipart \ 2 ^ 1Next IFor I = 1 To AcuFactorIf Mid$(TempString, I, 1) = "1" Then Exit ForMid$(TempString, I, 1) = " "Next IIntiStr = Trim(TempString)'Convert fpart, the fraction part, into byte array TempData2tfpart = fpart: TempString = ""For I = 1 To AcuFactorIf tfpart = 0 Then Exit Fortfpart = tfpart * 2tnpart = Int(tfpart): tfpart = tfpart - tnpartTempString = TempString + Right$(Str$(tnpart And &H1), 1)Next IFracStr = TempStringIf ipart > 0 Then CaseID = 1If ipart = 0 Then CaseID = 2End IfSelect Case CaseIDCase 0TempByte = 0TempString = Right$((String(AcuFactor, "0") + Hex$(TempByte)), AcuFactor / 4)CRC16Str = TempStringCase 1  'Data with integer partFor I = 1 To Len(IntiStr)If Mid$(IntiStr, I, 1) = "1" Then Exit ForNext IMoveDotPoint = Len(IntiStr) - IiDataExp = MoveDotPoint + OffSet'Now Sign, Exp and Fracpart readyTempData = iDataExpTempString = ""For I = 1 To OffSetBitsTempString = Right$(Str$(TempData And &H1), 1) + TempStringTempData = TempData \ 2 ^ 1Next I'Sign and ExponentCRC16Str = Trim(Str$(inDataSingn)) + Right$(TempString, OffSetBits)'Make full string and omit first "1"TempString = IntiStr + FracStrTempString = Right$(TempString, Len(TempString) - 1)CRC16Str = Left$((CRC16Str + TempString + String(AcuFactor, "0")), AcuFactor)Case 2  'Data without integer partFor I = 1 To Len(FracStr)If Mid$(FracStr, I, 1) = "1" Then Exit ForNext IMoveDotPoint = IiDataExp = -1 * MoveDotPoint + OffSet'Now Sign, Exp and Fracpart readyTempData = iDataExpTempString = ""For I = 1 To AcuFactorTempString = Right$(Str$(TempData And &H1), 1) + TempStringTempData = TempData \ 2 ^ 1Next ITempString = Right$(TempString, OffSetBits)'Sign and Exponent, and FracPartCRC16Str = Trim(Str$(inDataSingn)) + Trim(TempString) + Right$(FracStr, Len(FracStr) - MoveDotPoint)End SelectTempString = ""For I = 1 To AcuFactor Step 4TempByte = 0TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 3, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 2, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 1, 1)))TempByte = TempByte \ 2TempByte = TempByte Or (&H8 * Val(Mid$(CRC16Str, I + 0, 1)))TempString = TempString + Hex$(TempByte)Next IMKD = TempString
End Function
Function CVI(ByVal iData As String) As Long'CVI gives 16bits &HFFFF -32768 to 32767 8000-7fffDim iReturn As LongDim HiByte As String, LoByte As StringDim TempStr As StringTempStr = Right$(Space(4) + iData, 4)HiByte = Left$(TempStr, 2)LoByte = Right$(TempStr, 2)iReturn = Val("&H" + HiByte) * 256 + Val("&H" + LoByte)CVI = iReturn
End Function
Function CVL(ByVal lData As String) As Long'CVL gives 32bits &HFFFFFFFF    -2147483648 to 2147483647    80000000 to 7fffffffDim inData As StringDim iReturn As LongDim LoWord As Integer, HiWord As IntegerinData = Right((Space(8) + lData), 8)LoWord = Val("&H" + Right$(inData, 4))HiWord = Val("&H" + Left$(inData, 4))iReturn = HiWord * (&HFFFF + 1) + LoWordCVL = iReturn
End FunctionFunction CVS(ByVal sData As String) As SingleDim inData As StringDim TempStr As String, TempChar As String, TempCharVal As ByteDim SignBit As Integer, iExp As Integer, tiExp As IntegerDim I As Integer, J As IntegerDim IntiPart As String, FracPart As StringDim IntiData As Double, FracData As DoubleinData = Right$((String(8, "0") + sData), 8)TempStr = ""For I = 1 To 8TempChar = Mid$(inData, 9 - I, 1)TempCharVal = Val("&H" + Right$(TempChar, 1))For J = 1 To 4TempStr = Trim$(Str$(TempCharVal And &H1)) + TempStrTempCharVal = TempCharVal \ 2 ^ 1Next JNext ISignBit = 1If Left$(TempStr, 1) = "1" Then SignBit = -1iExp = 0For I = 2 To 9iExp = iExp * 2 ^ 1iExp = iExp Or Val(Mid$(TempStr, I, 1))Next I'positive for data greater than 1, or negtive for data with only fraction partIf iExp >= 127 Then     'IntiPart existtiExp = iExp - 127If tiExp > 0 ThenIntiPart = "1" + Left$(Mid$(TempStr, 10, 23), tiExp)FracPart = Right$((Mid$(TempStr, 10, 23)), 23 - tiExp)End IfIf tiExp = 0 ThenIntiPart = "1" + Left$(Mid$(TempStr, 10, 23), tiExp)FracPart = Right$((Mid$(TempStr, 10, 23)), 23)End IfElsetiExp = iExp - 127IntiPart = "0"FracPart = String(Abs(tiExp + 1), "0") + "1" + Mid$(TempStr, 10, 23)FracData = 0For I = 1 To Len(FracPart)If Mid$(FracPart, I, 1) = "1" ThenFracData = FracData + 2 ^ (-I)End IfNext IEnd IfIntiData = 0For I = 1 To Len(IntiPart)IntiData = IntiData * 2 ^ 1IntiData = IntiData Or Val(Mid$(IntiPart, I, 1))Next IFracData = 0For I = 1 To Len(FracPart)If Mid$(FracPart, I, 1) = "1" ThenFracData = FracData + 2 ^ (-I)End IfNext ICVS = SignBit * (IntiData + Val(Format$(FracData, "#.###############0")))
End Function
Function CVD(ByVal sData As String) As DoubleDim inData As StringDim TempStr As String, TempChar As String, TempCharVal As ByteDim SignBit As Integer, iExp As Integer, tiExp As IntegerDim I As Integer, J As IntegerDim IntiPart As String, FracPart As StringDim IntiData As Double, FracData As DoubleinData = Right$((String(16, "0") + sData), 16)TempStr = ""For I = 1 To 16TempChar = Mid$(inData, 17 - I, 1)TempCharVal = Val("&H" + Right$(TempChar, 1))For J = 1 To 4TempStr = Trim$(Str$(TempCharVal And &H1)) + TempStrTempCharVal = TempCharVal \ 2 ^ 1Next JNext ISignBit = 1If Left$(TempStr, 1) = "1" Then SignBit = -1iExp = 0For I = 2 To 12iExp = iExp * 2 ^ 1iExp = iExp Or Val(Mid$(TempStr, I, 1))Next I'positive for data greater than 1, or negtive for data with only fraction partIf iExp >= 1023 Then     'IntiPart existtiExp = iExp - 1023If tiExp > 0 ThenIntiPart = "1" + Left$(Mid$(TempStr, 13, 52), tiExp)FracPart = Right$((Mid$(TempStr, 13, 52)), 52 - tiExp)End IfIf tiExp = 0 ThenIntiPart = "1" + Left$(Mid$(TempStr, 13, 52), tiExp)FracPart = Right$((Mid$(TempStr, 13, 52)), 52)End IfElsetiExp = iExp - 1023IntiPart = "0"FracPart = String(Abs(tiExp + 1), "0") + "1" + Mid$(TempStr, 13, 52)FracData = 0For I = 1 To Len(FracPart)If Mid$(FracPart, I, 1) = "1" ThenFracData = FracData + 2 ^ (-I)End IfNext IEnd IfIntiData = 0For I = 1 To Len(IntiPart)IntiData = IntiData * 2 ^ 1IntiData = IntiData Or Val(Mid$(IntiPart, I, 1))Next IFracData = 0For I = 1 To Len(FracPart)If Mid$(FracPart, I, 1) = "1" ThenFracData = FracData + 2 ^ (-I)End IfNext ICVD = SignBit * (IntiData + Val(Format$(FracData, "#.###############0")))
End FunctionFunction CRC16(ByVal inData As String) As String
Dim TestString As String
Dim I As Integer, Temp As Integer
Dim PP As Integer
Dim CRCLo As Byte, CRCHi As Byte, TCRC As ByteDim LTable()
LTable() = Array( _"&H0000", "&HCC01", "&HD801", "&H1400", "&HF001", "&H3C00", "&H2800", "&HE401", _"&HA001", "&H6C00", "&H7800", "&HB401", "&H5000", "&H9C01", "&H8801", "&H4400")TestString = inData
'TestString = "010303E80002"CRCHi = &HFF: CRCLo = &HFFFor I = 1 To Len(TestString) / 2PP = Val("&H" + Mid$(TestString, I * 2 - 1, 2))Temp = (CRCLo And &HF) Xor (PP And &HF)CRCLo = CRCLo \ 2 ^ 4TCRC = (CRCHi And &HF)TCRC = TCRC * 2 ^ 4: CRCLo = CRCLo Or TCRCCRCHi = CRCHi \ 2 ^ 4CRCLo = CRCLo Xor (Val("&H" + (Right$(LTable(Temp), 2))))CRCHi = CRCHi Xor (Val("&H" + (Mid$(LTable(Temp), 3, 2))))Temp = (CRCLo And &HF) Xor (PP \ 2 ^ 4)CRCLo = CRCLo \ 2 ^ 4TCRC = (CRCHi And &HF)TCRC = TCRC * 2 ^ 4: CRCLo = CRCLo Or TCRCCRCHi = CRCHi \ 2 ^ 4CRCLo = CRCLo Xor (Val("&H" + (Right$(LTable(Temp), 2))))CRCHi = CRCHi Xor (Val("&H" + (Mid$(LTable(Temp), 3, 2))))
Next I
CRC16 = Hex$(CRCLo) + Hex$(CRCHi)
End FunctionFunction MbusVer() As IntegerMbusVer = 12
End Function

改一下工程名然后编译,这个OCX名字叫 Mbus.ocx,然后用regsvr32注册这个ocx,并打开VS2022建VB.NET新工程。在工程中引入Mbus这个ocx方式的COM

老套路,还是Imports进程序

 工程中填加模块

Module Module1Declare Function DllRegisterServer Lib "Mbus.ocx" Alias "DllRegisterServer" () As LongDeclare Function DllUnregisterServer Lib "Mbus.ocx" Alias "DllUnregisterServer" () As Long
End Module

在Application启动时自动注册ocx控件

  在主窗体关闭时自动注销ocx控件

    Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosedDim dReturn As DoubledReturn = DllUnregisterServer()dReturn = DllUnregisterServer()dReturn = DllUnregisterServer()End Sub

在窗体上的Command钮下,写调用代码。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickDim s As New Mbus.UserControl1TextBox1.Text = Microsoft.VisualBasic.Str(s.MbusVer() / 10)TextBox10.Text = "CRC16 = " & s.CRC16("010303E80002")TextBox2.Text = s.MKI(1123.21)          'MKITextBox9.Text = s.CVI(TextBox2.Text)    'CVITextBox3.Text = s.MKL(1123.21)          'MKLTextBox8.Text = s.CVL(TextBox3.Text)    'CVLTextBox4.Text = s.MKS(1123.21)          'MKSTextBox7.Text = s.CVS(TextBox4.Text)    'CVSTextBox5.Text = s.MKD(1123.21)          'MKDTextBox6.Text = s.CVD(TextBox5.Text)    'CVDEnd Sub

在x86模拟下调试并编译,测试通过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/104220.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

keepalived+lvs(DR)(四十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、作用 二、调度器配置 三、web节点配置 一、作用 使用keepalived解决lvs的单点故障 高可用集群 二、调度器配置 安装keepalived yum install -y k…

OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读

论文信息 题目&#xff1a;OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 作者:Karmesh Yadav&#xff0c; Arjun Majumdar&#xff0c; Ram Ramrakhya 来源&#xff1a;arxiv 时间&#xff1a;2023 代码地址&#xff1a; https://github.com/ykarmesh…

whisper 语音识别项目部署

1.安装anaconda软件 在如下网盘免费获取软件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zOZCQOeiDhx6ebHh5zNasA 提取码&#xff1a;hfnd 2.使用conda命令创建python3.8环境 conda create -n whisper python3.83.进入whisper虚拟环境 conda activate whisper4.…

vue uniapp 同意验证码滑块验证

前言 &#xff08;vue-puzzle-vcode&#xff09; 发送验证码以及登录的时候会做验证&#xff0c;防止机刷等 效果图 一、安装依赖 npm install vue-puzzle-vcode --save二、使用步骤 1.html使用 <Vcode :show"isShow" success"onSuccess"/>2.j…

数据降维 | MATLAB实现T-SNE降维特征可视化

数据降维 | MATLAB实现T-SNE降维特征可视化 目录 数据降维 | MATLAB实现T-SNE降维特征可视化降维效果基本描述程序设计参考资料 降维效果 基本描述 T-SNE降维特征可视化&#xff0c;MATLAB程序。 T-分布随机邻域嵌入&#xff0c;主要用途是对高维数据进行降维并进行可视化&…

Anolis 8.6 下 Redis 7.2.0 集群搭建和配置

Redis 7.2.0 搭建和集群配置 一.Redis 下载与单机部署1.Redis 下载2.虚拟机配置3.Redis 单机源码安装和测试4.Java 单机连接测试1.Pom 依赖2.配置文件3.启动类4.配置类5.单元测试6.测试结果 二.Redis 集群部署1.主从1.从节点配置2.Java 测试 2.哨兵1.哨兵节点配置2.复制一个哨兵…

SpringCloud学习笔记(六)_Ribbon服务调用

Ribbon介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具 Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时、重试等。简单的说&#xff0c;就是…

java八股文面试[Spring]——如何实现一个IOC容器

什么是IOC容器 IOC不是一种技术&#xff0c;只是一种思想&#xff0c;一个重要的面向对象编程的法则&#xff0c;它能指导我们如何设计出松耦合&#xff0c;更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象&#xff0c;从而导致类与类之间高耦合&#xff0c;难于…

生成式人工智能的潜在有害影响与未来之路(三)

产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域&#xff0c;旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害&#xff1a;设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…

LinkedList的顶级理解

目录 1.LinkedList的介绍 LinkedList的结构 2.LinkedList的模拟实现 2.1创建双链表 2.2头插法 2.3尾插法 2.4任意位置插入 2.5查找关键字 2.6链表长度 2.7遍历链表 2.8删除第一次出现关键字为key的节点 2.9删除所有值为key的节点 2.10清空链表 2.11完整代码 3.…

聚观早报 | 云鲸扫拖机器人J4体验;芯科科技第三代无线开发平台

【聚观365】8月24日消息 云鲸扫拖机器人J4体验 芯科科技推出第三代无线开发平台 英伟达与VMWare宣布扩大合作 万物新生&#xff08;爱回收&#xff09;2023年二季度财报 充电桩需求增长带动汽车后服务市场 云鲸扫拖机器人J4体验 家庭卫生清洁是每个人都无法回避的事情&am…

Unity 类Scene窗口相机控制

类Scene窗口相机控制 &#x1f354;效果 &#x1f354;效果 传送门&#x1f448;

疫情下社区管理系统的设计与实现(论文+源码)_kaic

疫情下社区管理系统 摘 要&#xff1a;新冠疫情下的社区人员管理系统是基于SpringBoot搭建的一套前后端分离系统。面向疫情下的社区管理人员和社区用户&#xff0c;主要用于进行社区服务&#xff0c;进行高效的社区人员管理。具有一定的经济效益和社会效益。本文分析了新冠疫情…

上门服务系统|上门服务小程序如何提升生活质量?

上门服务其实就是本地生活服务的升级&#xff0c;上门服务包含很多行业可以做的。例如&#xff1a;厨师上门、上门家电维修、跑腿等等。如今各类本地化生活服务越来越受大家的喜爱。基于此市场愿景&#xff0c;我们来谈谈上门服务系统功能。 一、上门服务系统功能 1、预约服务…

美创科技“签”手柠檬文才学堂,共推高校数据安全建设

近日&#xff0c;由柠檬文才学堂联合中国教育在线、东北财经大学网络教育学院共同主办的“三教统筹下高校继续教育数字化转型研讨”顺利召开。 国内高等院校&#xff08;高职院校&#xff09;继续教育分管领导&#xff0c;继续教育学院领导及继续教育信息化、教学教务管理、课程…

IP库新增经过实践的Verilog 库

网上严重缺乏实用的 Verilog 设计。Project F 库是尝试让 FPGA 初学者变得更好部分。 设计包括 Clock- 时钟生成 (PLL) 和域交叉Display - 显示时序、帧缓冲区、DVI/HDMI 输出Essential- 适用于多种设计的便捷模块Graphics- 绘制线条和形状Maths- 除法、LFSR、平方根、正弦....…

C语言练习1(巩固提升)

C语言练习1 选择题 前言 “人生在勤&#xff0c;勤则不匮。”幸福不会从天降&#xff0c;美好生活靠劳动创造。全面建成小康社会的奋斗目标&#xff0c;为广大劳动群众指明了光明的未来&#xff1b;全面建成小康社会的历史任务&#xff0c;为广大劳动群众赋予了光荣的使命&…

【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)

本系列其他文章 【填坑向】MySQL常见报错及处理系列&#xff08;Communications link failure & Access denied for user ‘root‘‘localhost‘&#xff09;_AQin1012的博客-CSDN博客翻一下大致的意思就是默认会按照如下的顺序读取配置文件&#xff0c;我上面贴出的配置文…

WebDAV之葫芦儿·派盘+柚子记账

柚子记账是一个手机记账的软件,这个软件主要是给那些懒人进行设计的,这里有很多关于记账的模板可以让你直接在线使用,你只需要导入相关的数据就可以了,整个操作是非常简单的,而且你也可以进行自定义的图表制作,生成你自己的记账模式。每当你记完之后,系统都会自动给你总…

Systick滴答定时器

今天&#xff0c;对Systick滴答定时器进行资料的整理&#xff0c;这个定时器在程序中的作用就是提供延时函数。参考&#xff08;【STM32】Systick滴答定时器_一只大喵咪1201的博客-CSDN博客&#xff09; Systick滴答定时器的介绍 相关寄存器 寄存器CTRL 补充HCLK 寄存器LOAD…