曾經看到一個一樣的帖子,不知道原樓主問題是否解決,本人也遇到一樣的問題,經過幾天的分析摸索,問題已經解決,特此告之方法以免使用該控制元件的其他朋友少走彎路。
當使用一些新型實用漂亮的按鈕如以下經過本人挑選的三個按鈕 JCButton(用戶按鈕)、EXButton1.ocx、hmButton1.ocx (EXButton1.ocx、hmButton1.ocx按鈕更是不需要注冊)時,在退出或者程式運行時出現莫名其妙的崩潰(如記憶體不能為空等),出現此類崩潰的原因是用戶在程式中使用了“END”來結束整個程式。可改為 Unload Form1、 Unload Form2、 Unload Form3卸載所有表單,這樣會騰出時間讓按鈕控制元件釋放所占用的記憶體,而不是使用“END”一錘定音的結束整個程式。
uj5u.com熱心網友回復:
本人猜想,當程式需要使用不需要注冊的控制元件時(JCButton按鈕雖然是用戶控制元件,但生成OCX后一樣不需要注冊,也只有使用其OCX控制元件時才會崩潰,使用用戶控制元件未發現崩潰),這些控制元件要運行,會直接使用記憶體?那么程式中都不能用“end”來結束整個程式?望高手給出答案uj5u.com熱心網友回復:
如何用vb語言撰寫crc16uj5u.com熱心網友回復:
這沒什么好奇怪的,用 End進行“暴力結束”,很可能造成一些“資源”(GDI句柄、記憶體句柄等)不能正確釋放,
引起一些“問題”實屬正常。
我的VB程式, 從來沒有使用 End來結束運行的。
uj5u.com熱心網友回復:
如今又發現,沒有用“end”結束程式的時候,當使用JCButton按鈕過多時,且程式較大時也會出現崩潰uj5u.com熱心網友回復:
是不是JCButton按鈕不能用于大型程式?uj5u.com熱心網友回復:
vb語言撰寫crc16,這個可用:
Public Function CRC16(P As String) As String
Dim DataA() As Byte
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC暫存器
Dim CL As Byte, CH As Byte '多項式碼&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim I As Integer
Dim Flag As Integer
Dim strMsg As String
Dim intLen As Integer
strMsg = Replace(P, " ", "")
intLen = Len(strMsg) / 2 - 1
ReDim DataA(0 To intLen) As Byte
For I = 0 To intLen
DataA(I) = Val("&H" & Mid(strMsg, I * 2 + 1, 2))
Next
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For I = 0 To UBound(DataA)
CRC16Lo = CRC16Lo Xor DataA(I) '每一個資料與CRC暫存器進行異或
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then '如果高位位元組最后一位為1
CRC16Lo = CRC16Lo Or &H80 '則低位位元組右移后前面補1
End If '否則自動補0
If ((SaveLo And &H1) = &H1) Then '如果LSB為1,則與多項式碼進行異或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next
CRC16 = Right("0" & Hex(CRC16Lo), 2) & Right("0" & Hex(CRC16Hi), 2) 'CRC16的校驗碼(低位在前高位在后)
Erase DataA
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/23370.html
標籤:控件
上一篇:主成分分析
下一篇:VBA學習之旅
