none
VB2008 RS232 RRS feed

  • 問題

  • 為什麼我在執行已下程式時,出現建立表單時發生錯誤。如需詳細資訊,請參閱 Exception.InnerException。錯誤是: 類別未登錄 (發生例外狀況於 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

    Imports System.IO.Ports

    Public Class Form1
        Dim RS232 As SerialPort
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim com As String = "com4"
            If RadioButton1.Checked = True Then
                TextBox2.Text = "F"
            ElseIf RadioButton2.Checked = True Then
                TextBox2.Text = "R"
            Else
                TextBox2.Text = "未選馬達轉向"
            End If

            TextBox4.Text = (Val(TextBox3.Text) * 10) \ 10
            TextBox5.Text = (Val(TextBox3.Text) - (Val(TextBox3.Text) * 10) \ 10) * 50

            RS232 = New IO.Ports.SerialPort(com, 9600, Parity.None, 8, IO.Ports.StopBits.One)
            RS232.Open()    '開啟通訊埠
            If Not RS232.IsOpen Then
                MsgBox("~~通訊埠尚未開啟~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
            Else
                RS232.Close()
            End If

        End Sub

    2013年3月21日 下午 01:05

解答

  • (1) 在使用 .Net Framework 類別寫序列埠時, 只要用 .Net 中的 Serialport 類別就可以了, 沒有必要再用 AxMsComm .

    (2) 為何在 VS 2010 加了會正常, 在 VS2008 卻會掛點, 原因是

    (2-1) VS 2010 中預設的建置目標平台是 X86

    (2-2) VS 2008 中預設的建置目標平台是 AnyCpu

    (2-3) 然後很不巧, 你的作業系統是 X64 的, 而 AxMSComm 這個 COM 元件只有 X86 版, 所以在 AnyCPU 的目標平台建置又在 X64 的 Windows 上跑時, 它會以 X64 的形式跑, 而 X64 和 X86 的行程是無法互相呼叫的, 結果就是你的錯誤訊息

    (3) 結論就是, 如果你要用 .Net 寫, 請忘掉 AxMSComm , 把它從你的畫面上拿掉.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 米娜 2013年3月22日 上午 12:20
    2013年3月21日 下午 04:11
    版主

所有回覆

  • 你畫面上是不是有用到 COM 元件 (此 COM 非指Serialport)  ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2013年3月21日 下午 01:48
    版主
  • 我在寫vb2010時寫那上述程式在加上AxMSComm1_OnComm執行是ok的 為什麼?

    也就是說我那些上述程式在vb2008不需要在叫AxMSComm1_OnComm 類似電話的形狀??

    • 已編輯 米娜 2013年3月21日 下午 02:02
    2013年3月21日 下午 01:55
  • 不要在 VBNET 內使用 VB6 控制項,這在你的問題中回過很多次了。
    2013年3月21日 下午 04:10
  • (1) 在使用 .Net Framework 類別寫序列埠時, 只要用 .Net 中的 Serialport 類別就可以了, 沒有必要再用 AxMsComm .

    (2) 為何在 VS 2010 加了會正常, 在 VS2008 卻會掛點, 原因是

    (2-1) VS 2010 中預設的建置目標平台是 X86

    (2-2) VS 2008 中預設的建置目標平台是 AnyCpu

    (2-3) 然後很不巧, 你的作業系統是 X64 的, 而 AxMSComm 這個 COM 元件只有 X86 版, 所以在 AnyCPU 的目標平台建置又在 X64 的 Windows 上跑時, 它會以 X64 的形式跑, 而 X64 和 X86 的行程是無法互相呼叫的, 結果就是你的錯誤訊息

    (3) 結論就是, 如果你要用 .Net 寫, 請忘掉 AxMSComm , 把它從你的畫面上拿掉.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 米娜 2013年3月22日 上午 12:20
    2013年3月21日 下午 04:11
    版主