簡體   English   中英

將VB代碼轉換為C#

[英]converting vb code to c#

即時通訊使用mobitek gsm調制解調器,其使用的源代碼在VB中。 現在我想將代碼轉換為C#。 我遇到麻煩的代碼是intModemStatus = SMS.ModemInit(frmModem.txtPort.Text, "") 之后,代碼將通過選擇大小寫進行如下操作:

intModemStatus = SMS.ModemInit(frmModem.txtPort.Text, "")

    Select Case intModemStatus

        Case 0
            FrmModem.txtText.Text = "GSM Modem Not Connected!"
            '[VB - Module1] frmModem.txtText = "GSM Modem Not Connected!"
            Exit Sub

        Case 1
            FrmModem.txtText.Text = "CONNECTED!"
            '[VB - Module1] frmModem.txtText = "GSM Modem Connected!"
            Exit Sub

        Case 2
            FrmModem.txtText.Text = "PIN Required!"
            '[VB - Module1] frmModem.txtText = "PIN Required!"
            Exit Sub

        Case 3
            FrmModem.txtText.Text = "Incorrect PIN Entered! Warning after 3 tries of incorrect PIN entered, your SIM card will be blocked by TELCO!"
            '[VB - Module1] frmModem.txtText = "Incorrect PIN entered! Warning: after 3 tries of incorrect PIN entered, your SIM card will be blocked by TELCO!"
            Exit Sub

        Case 4
            FrmModem.txtText.Text = "Your SIM card is blocked by TELCO!"
            '[VB - Module1] frmModem.txtText = "Your SIM card is blocked by TELCO!"
            Exit Sub

        Case 5
            FrmModem.txtText.Text = "Your SIM card has problem!"
            '[VB - Module1] frmModem.txtText = "Your SIM card has problem!"
            Exit Sub

        Case Else
            FrmModem.txtText.Text = "GSM Modem Not Connected!"
            '[VB - Module1] frmModem.txtText = "GSM Modem Not Connected!"
            Exit Sub

    End Select

我已經將所有內容都轉換為c#包含開關情況,如下所示:

int ModemStatus = sms.ModemInit(txtPort.Text, "");
        switch (intModemStatus)
        {
            case 0:

                txtText.Text = "GSM Modem Not Connected!";
                //[VB - Module1] frmModem.txtText = "GSM Modem Not Connected!"
                return;

                break;
            case 1:
                txtText.Text = "CONNECTED!";
                //[VB - Module1] frmModem.txtText = "GSM Modem Connected!"
                return;


                break;
            case 2:
                txtText.Text = "PIN Required!";
                //[VB - Module1] frmModem.txtText = "PIN Required!"
                return;


                break;
            case 3:
                txtText.Text = "Incorrect PIN Entered! Warning after 3 tries of incorrect PIN entered, your SIM card will be blocked by TELCO!";
                //[VB - Module1] frmModem.txtText = "Incorrect PIN entered! Warning: after 3 tries of incorrect PIN entered, your SIM card will be blocked by TELCO!"
                return;


                break;
            case 4:
                txtText.Text = "Your SIM card is blocked by TELCO!";
                //[VB - Module1] frmModem.txtText = "Your SIM card is blocked by TELCO!"
                return;


                break;
            case 5:
                txtText.Text = "Your SIM card has problem!";
                //[VB - Module1] frmModem.txtText = "Your SIM card has problem!"
                return;


                break;
            default:
                txtText.Text = "GSM Modem Not Connected!";
                //[VB - Module1] frmModem.txtText = "GSM Modem Not Connected!"
                return;


                break;
        }

但是,我在這段代碼中遇到麻煩int ModemStatus = sms.ModemInit(txtPort.Text, ""); 它說

參數1無法將字符串轉換為short。 最好的重載方法匹配為mobitekSMSAPI5.ModemInit(short,string)有一些無效的參數。

然后我試圖更改int ModemStatus = sms.ModemInit(txtPort.Text, ""); 但它說的一樣。

要使用mobitek gsm調制解調器,我需要添加MobitekSMSAPI5的引用,但是我做到了。 開關代碼將確定調制解調器是否已連接。

我真的希望有人加緊解決這個問題。 我卡在中間,我不知道從哪里開始。 任何幫助都值得贊賞。 謝謝。

這是我的錯誤:當我使用此代碼時,它出現:

 short port;
if (!short.TryParse(txtPort.Text, out port))
{
    throw new Exception("Failed to parse port");
    // or any other handling - depends on your needs
}

int ModemStatus = sms.ModemInit(port, "");

在此處輸入圖片說明

現在,當我更改如下代碼時,它似乎出現了不同的錯誤。

在此處輸入圖片說明

sms.ModemInit接受short作為第一個參數。 只要您正在處理VB.Net,就將字符串轉換為short隱式完成。 由於編譯器的Option Strict選項是有可能的,默認情況下該Option Strict處於禁用狀態。 啟用后,此選項僅允許隱式加寬轉換 禁用時(默認狀態),此選項允許隱式變窄和變寬轉換

但是在C#中,禁止縮小隱式轉換,這就是為什么翻譯后的代碼失敗的原因。 因此,您需要顯式解析string值,並將解析后的數字傳遞給方法:

short port = short.Parse(txtPort.Text);
int ModemStatus = sms.ModemInit(port, "");

或者,甚至更好地使用TryParse以避免可能的異常:

short port;
if (!short.TryParse(txtPort.Text, out port))
{
    throw new Exception("Failed to parse port");
    // or any other handling - depends on your needs
}

int ModemStatus = sms.ModemInit(port, "");

我會這樣做:

short shortValue = 0;
if (short.TryParse(txtPort.Text, out shortValue))
{
    ... continue using shortValue
}
else
{
    ...Tell user the value must be a number
}

這樣,您可以處理用戶輸入非數字的情況(不求助於異常)

您的問題只是幾個強制性問題。 第一個與端口號有關, ModemInit方法需要一個short值,但需要傳遞一個string ,因此您已經使用short.TryParse進行了short.TryParse

另一個問題是您的返回類型, ModemInit方法似乎返回其自己的自定義enum值,如果您感興趣的只是整數值,則只需將其轉換為int

int ModemStatus = (int)sms.ModemInit(port, "");

正如錯誤明確指出的那樣,您不能將字符串作為簡短形式傳遞。

您需要調用short.Parse()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM