none
無法加入DLL參考 RRS feed

  • 問題

  • 請教各位大大

    此帖發表在這應該是OK的吧!

    請教,我開啟空白檔,要加入跑馬燈廠商提供的DLL檔,無法加入參考。為什麼呢?

    若使用程式碼Private Declare Function SCL_NetInitial Lib "SCL_API_Stdcall".....,引入的方式,也是不行。

    謝謝。
    2010年1月17日 下午 03:56

解答

所有回覆

  • 你 DLL 是哪種類型的?

    可以加入參考的必須是 .NET DLL 或支援 COM Automation 的 DLL。
    要用 Declare 宣告加入的必須是 Win32 且有 Export 函數的 DLL (ex: KERNEL32.DLL, GDI32.DLL, USER32.DLL)
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年1月17日 下午 04:02
    版主
  • 之前有幾篇討論這個題目的文
    http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/87829115-01fe-4275-911a-e926d34aac40
    http://social.msdn.microsoft.com/Forums/zh-TW/234/thread/476cb340-629d-4e7b-be6c-4f5e79c81d47
    http://social.msdn.microsoft.com/forums/zh-TW/233/thread/6690ef43-92b5-4c1a-829e-e87565f54587/
    http://social.msdn.microsoft.com/Forums/zh-TW/803/thread/1f014728-cc17-4cfd-81a8-e3bf95302375
    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/ea766087-2dce-49f5-8091-0c1356fc56a4/
    http://social.msdn.microsoft.com/Forums/zh-TW/803/thread/5b4aee5d-013b-40f7-ae0a-5510ae53039f

    族繁不及備載
    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%u52a0%u5165%20%20DLL
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年1月17日 下午 04:19
    版主
  • 小朱大大您好,先謝謝您的回覆

    DLL檔是哪一類型的喔,我不會看。

    但廠商提供的sample是VB6.0寫的,我使用VB2005開啟,進行轉換,沒有任何錯誤。

    可以執行,但運到DLL的功能時,就說沒有DLL參考。

    2010年1月17日 下午 04:19
  • 你有把那個DLL檔放在你Exe檔的同一個目錄下嗎 ?
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年1月17日 下午 04:20
    版主
  • 報告BILL大大,謝謝大大

    有,有把DLL放在BIN裡面的release裡面。

    2010年1月17日 下午 04:28
  • 那麼請把原先 VB6 的使用方式摘列出來。

    你不知道如何用,總有測試用的程式碼片段與範例吧?這些資訊不提供大家如何猜?

    不然你猜猜我現在要用哪種 dll 算了。網友不是神,本版置頂公告有講如何問問題,先看看該怎樣發問吧。
    張貼文章應注意事項及應提供資訊
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月17日 下午 04:38
  • 多謝大大的指責教導。

    小的馬上將程式全部貼上。

    VERSION 5.00
    Begin VB.Form Form1
       Caption         =   "Form1"
       ClientHeight    =   1740
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   4530
       LinkTopic       =   "Form1"
       ScaleHeight     =   1740
       ScaleWidth      =   4530
       StartUpPosition =   3  '窗口缺省
       Begin VB.CommandButton Command2
          Caption         =   "發送文本,直接靜止顯示"
          Height          =   375
          Left            =   720
          TabIndex        =   1
          Top             =   960
          Width           =   3255
       End
       Begin VB.CommandButton Command1
          Caption         =   "發送文本文件, 帶移動效果"
          Height          =   375
          Left            =   720
          TabIndex        =   0
          Top             =   240
          Width           =   3255
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    ' ---------------------------------------------------------------------------------------------
    ' Functions in DLL
    Private Declare Function SCL_NetInitial Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal Password As String, ByVal IP As String, ByVal TimeOut As Long, ByVal Retry As Long, ByVal UDPPort As Integer, ByVal SCL2008 As Boolean) As Boolean
    Private Declare Function SCL_ComInitial Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal ComPort As Long, ByVal Baudrate As Long, ByVal LedNum As Long, ByVal TimeOut As Long, ByVal Retry As Long, ByVal SCL2008 As Boolean) As Boolean
    Private Declare Function SCL_ShowString Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByRef TextInfo As Integer, ByVal Str As String) As Boolean
    Private Declare Function SCL_SendFile Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal DrvNo As Long, ByVal Path As String, ByVal FileName As String) As Boolean
    Private Declare Function SCL_SendData Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal Offset As Long, ByVal SendBytes As Long, ByRef Buff As Byte) As Boolean
    Private Declare Function SCL_SaveFile Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal DrvNo As Long, ByVal FileName As String, ByVal Length As Long, ByVal Da As Long, ByVal Ti As Long) As Boolean
    Private Declare Function SCL_GetFileDosDateTime Lib "SCL_API_Stdcall" (ByVal FileName As String, ByRef Da As Long, ByRef Ti As Long) As Boolean
    Private Declare Function SCL_RemoveFile Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal DrvNo As Long, ByVal FileName As String) As Boolean
    Private Declare Function SCL_Replay Lib "SCL_API_Stdcall" (ByVal DevID As Integer, ByVal Drv As Long, ByVal Index As Long) As Boolean
    Private Declare Function SCL_Close Lib "SCL_API_Stdcall" (ByVal DevID As Integer) As Boolean
    ' ---------------------------------------------------------------------------------------------
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    ' ---------------------------------------------------------------------------------------------
    ' Constant define
    Const bSCL2008 = True           'TRUE: 控制器為SCL2008, FALSE: 控制器為SuperComm
    Const IPAddr = "10.1.1.100"     '網絡通訊: 控制器 IP 地址
    Const UDPPort = 1024            '網絡通訊: UDP 端口號

    Const LedNum = 0                '串口通訊: 控制器編號
    Const ComPort = 1               '串口通訊: 計算機串口號
    Const Baudrate = 57600          '串口通訊: 通訊速率

    Const bOnlyShowStatic = False   'TRUE: 只靜止輸出,不帶移動效果, FALSE:試驗發文件的方式
    Const bSendFile = False         'TRUE: 用 SendFile 發送文件, FALSE:用SendData,SaveFile發送文件
    Const bNet = False               'TRUE: 使用網絡收發, FALSE: 使用串口收發

    Const mDevID = 9                '任意的2字節通訊設備編號

    Const TimeOut = 2               '通訊超時上限
    Const RetryTimes = 2            '通訊重發次數

    Const LedWidth = 128            '區域寬
    Const LedHeight = 32            '區域高
    Const CharColor = 255           '文字顏色

    Const FileName = "Test.Txt"     '文本文件名

    ' ---------------------------------------------------------------------------------------------
    ' 文本輸出信息結構,
    Private Type TextInfoType
        Left    As Integer
        Top     As Integer
        Width   As Integer
        Height  As Integer
        Color   As Long
        ASCFont As Integer
        HZFont  As Integer
        XPos    As Integer
        YPos    As Integer
    End Type
    Private Sub Command1_Click()
    Dim PwdStr As String
    Dim S As String
    Dim bOK As Boolean, xb As Boolean
    Dim Buff(1024) As Byte
    Dim Da As Long, Ti As Long
    Dim TextInfo As TextInfoType
    Dim FileH As Long, FLen As Long
    Dim bV As Byte
       
        S = ""
        'Use 6x12,12x12 fonts
        S = S + "   `A1`H2`C0000FF紅色12點顯示" + Chr$(13) + Chr$(10)

        'Use 8x16,16x16 fonts
        S = S + "`A3`H4`C00FF00綠色16點顯示AB"

        'Use 12x24,24x24 fonts
        S = S + "`A5`H6`C00FFFF黃色24點顯示CD`Y000"

        'Use 16x32,32x32 fonts
        S = S + "`M3`A7`H8`C00FFFF反白32點顯示EF"
                  
        '將字符串寫入文本文件
        FileH = 13
        Open FileName For Binary As FileH
        Put FileH, , S
        Close FileH
       
        '通訊初始化
        If bNet Then
            bOK = SCL_NetInitial(mDevID, "", IPAddr, TimeOut, RetryTimes, UDPPort, bSCL2008)
        Else
            bOK = SCL_ComInitial(mDevID, ComPort, Baudrate, LedNum, TimeOut, RetryTimes, bSCL2008)
        End If

        If bOK = False Then MsgBox ("初始化失敗")

        '發送文件
        If bOK Then
            If bSendFile Then
                bOK = SCL_SendFile(mDevID, 2, "", FileName)
            Else
                '拆分的發送文本文件
                FLen = StringToByte(S, Buff)
                bOK = SCL_GetFileDosDateTime(FileName, Da, Ti)
                If bOK Then bOK = SCL_SendData(mDevID, 0, FLen, Buff(0))
                If bOK Then bOK = SCL_SaveFile(mDevID, 2, FileName, FLen, Da, Ti)
            End If
            If bOK = False Then MsgBox ("發送文件失敗")
        End If
       
        '通知控制器重新播放節目
        If bOK Then
            If bSCL2008 Then
                xb = SCL_Replay(mDevID, 0, 0)
            Else
                xb = SCL_Replay(mDevID, 1, 0)
            End If
            If xb = False Then MsgBox ("重啟節目表失敗")
        End If

        xb = SCL_Close(mDevID)
             
    End Sub
    Private Sub Command2_Click()
    Dim S As String
    Dim bOK As Boolean, xb As Boolean
    Dim Buff(1024) As Byte
    Dim Da As Long, Ti As Long
    Dim TextInfo As TextInfoType
        If bSCL2008 Then
            TextInfo.Left = 4096 - LedWidth
        Else
            TextInfo.Left = 960 - LedWidth
        End If
        TextInfo.Top = 0
        TextInfo.Width = LedWidth
        TextInfo.Height = LedHeight
        TextInfo.Color = CharColor
        TextInfo.ASCFont = 1
        TextInfo.HZFont = 2
        TextInfo.XPos = 0
        TextInfo.YPos = 0
       
        S = ""
        'Use 6x12,12x12 fonts
        S = S + "   `A1`H2`C0000FF紅色12點顯示"

        'Use 8x16,16x16 fonts
        S = S + "`A3`H4綠色16點顯示AB"

        'Use 12x24,24x24 fonts
        S = S + "`A5`H6黃色24點顯示CD`Y000"

        'Use 16x32,32x32 fonts
        S = S + "`M3`A7`H8反白32點顯示EF"

        '通訊初始化
        If bNet Then
            bOK = SCL_NetInitial(mDevID, "", IPAddr, TimeOut, RetryTimes, UDPPort, bSCL2008)
        Else
            bOK = SCL_ComInitial(mDevID, ComPort, Baudrate, LedNum, TimeOut, RetryTimes, bSCL2008)
        End If

        If bOK = False Then MsgBox ("初始化失敗")

        If bOnlyShowStatic = False Then
            '刪除移動播出的文本文件
            '僅實現靜止顯示則可不調用這個函數
            If bOK Then
                bOK = SCL_RemoveFile(mDevID, 2, FileName)
                If bOK = False Then MsgBox ("刪除文件失敗")
            End If

            '重啟節目表,使屏幕靜止(因為節目表中的文本文件不存在了)
            '僅實現靜止顯示則可不調用這個函數
            If bOK Then
                If bSCL2008 Then
                    bOK = SCL_Replay(mDevID, 0, 0)
                Else
                    bOK = SCL_Replay(mDevID, 1, 0)
                End If
                If bOK = False Then MsgBox ("重啟節目表失敗")
                Sleep (500)
            End If
        End If

        '顯示文字串,自動排版,超出部分自動截斷
        If bOK Then
            bOK = SCL_ShowString(mDevID, TextInfo.Left, S)
            If bOK = False Then MsgBox ("文字直接輸出失敗")
        End If

        SCL_Close (mDevID)
    End Sub
    Private Function StringToByte(ByRef S As String, ByRef ByteBuf() As Byte) As Integer
    Dim i As Integer
    Dim j As Integer
    Dim v As Integer
    Dim xv As Integer
    Dim Lv As Long
        j = 0
        For i = 0 To Len(S) - 1
            v = Asc(Mid(S, i + 1, 1))           '取一個16位字符
            If v > 0 Then                       '普通字符
                ByteBuf(j) = v
                j = j + 1
            Else                                '小於0則為中文字,實際是大於等於32768
                Lv = 65536 + v
                xv = Lv \ 256
                ByteBuf(j) = xv
                j = j + 1
                xv = Lv Mod 256
                ByteBuf(j) = xv
                j = j + 1
            End If
        Next i
        StringToByte = j
    End Function

     

    2010年1月17日 下午 04:41
  • 報告各位大大

    以上是VB6.0,sample內全部的內容,轉到VB2005能夠成功轉換。

    只差在DLL檔案,無法引入。

    感謝各位大大。
    2010年1月17日 下午 04:42
  • 跑馬燈通常是透過
    RS232 -> RS485 -> 廠商特殊通訊規格
    來連線。

    你也要確認廠商包裝好的函數是包到哪,是從 RS232 就包起還是最後的通訊規格才包起?如果只包最後,.Net 在通訊埠的處理方式跟 VB6 不同,要整個重寫,不是只呼叫函數而已。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月17日 下午 04:43
  • 謝謝大大的指導

    大大說的RS232 -> RS485 -> 廠商特殊通訊規格,這我瞭解。


    要整個重寫,不是只呼叫函數而已,這點我不太懂。

    若整個重新寫硬體的函數,那可真會暈倒,可是我想DLL用途應該不是這樣吧!

    2010年1月17日 下午 04:50
  • 從你貼出來的程式碼猜測:
    1. 此設備支援 COM 通訊與 TCPIP 兩種方式
    2. 此 dll 為函數型,請提供 VB.Net 你如何使用與完整錯誤訊息。
    3. 從他有包到鮑率可以推估是包到 RS232 。

    是否重寫跟 DLL 用途無關,而是跟 DLL 功能有關,你沒提供任何資訊,如何猜測 DLL 有哪些功能?
    VB6 到 RS232 是 MSCOMM.ocx ,VBNET 是 SerialPort ,如果需要寫到 COM1 通訊,重寫算是正常的,很多硬體廠商可能只給 ModBus 功能列表,重寫不是很正常嗎?

    另外 VBNET 呼叫 dll 請先將線上手冊這部分看一遍,調整宣告。
    Long -> Integer, Integer -> Short 的原因為何,這部分還是小問題,String 要測過才知道,.Net 這部分改比較多,VB6 程式碼不能直升 VBNET 用。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月17日 下午 05:31
  • 有任何的錯誤訊息可供參考嗎 ?
    搞不好這個是要用DllImport來呼叫, 詳情請參考
    http://msdn.microsoft.com/zh-tw/library/172wfck9.aspx
    http://msdn.microsoft.com/zh-tw/library/ms172890.aspx
    http://msdn.microsoft.com/zh-tw/library/8877bdk6.aspx
    http://msdn.microsoft.com/zh-tw/library/e7a79b4y.aspx


    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    • 已標示為解答 percy682 2010年1月18日 上午 12:13
    2010年1月17日 下午 05:33
    版主
  • 第一個錯誤訊息是執行程式時的錯誤:

    無法載入DLL 'SCL_API_Stdcall':找不到指定的模組(發生例外狀況於 HRESULT:0x800700E)

    第二個錯誤訊息是開啟VB2005直接加入DLL:
    請確定這是一個可存取的檔案,而是一個有效的組件或COM元件

    感謝各位大大的回覆。

    我綜整一下:應該是不是無法使用直接加入的方式,要使用DllImport來呼叫。在網上有看到,有些DLL並非可以直接使用載入的方式,除非是.NET的

    不曉得對不對?以及差異??

    • 已標示為解答 percy682 2010年1月18日 上午 12:13
    • 已取消標示為解答 percy682 2010年1月18日 上午 12:13
    2010年1月18日 上午 12:00
  • 觀念:
    a. 當 VB6 用宣告引入,VBNET 就是用宣告引入,當 VB6 用參考,VBNET 就是用參考。
    b. VBNET 支援 VB6 的舊式宣告語法,所以可以用 Declare 或 DllImport 來處理。
    c. 所有 dll 預設都為可以直接載入,只有當需要更大彈性動態載入時,開發者用盡方法繞開自動直接載入。

    差異既有討論有,請搜尋 dll 類型:
    http://www.google.com.tw/search?hl=zh-TW&q=dll+%E9%A1%9E%E5%9E%8B+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F232%2F&meta=&aq=f

    你的第一個錯誤請搜尋 dll 路徑:
    http://www.google.com.tw/search?hl=zh-TW&q=dll+%E8%B7%AF%E5%BE%91+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F232%2F&meta=&aq=f
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月18日 上午 12:12
  • 看起來你的 DLL 是 Win32 DLL。
    你那支 DLL 有放在和你的程式相同的路徑,或是 windows/system32 目錄嗎?
    最好是和你的程式放在一起(相同的路徑)。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年1月18日 上午 12:13
    版主
  • 非常感謝各位大大的協助

    初步的問題,我一開始也在想,為何無法直接載入DLL檔案。搜尋一下,發現載入DLL不是只是按按滑鼠而已。

    但經過使用Dllimport,整個錯誤就消失了,變成初始化失敗。

    程式與DLL放在一起的觀念我有。同樣都需要敲打鍵盤的方式,但不懂 Declare 或 DllImport 這兩種的方式差異在哪?

    最後初始化失敗,我想應該是沒有接到硬體,或者是向新冷熱情熄大大說的,通訊部分沒有弄好。

    很多觀念還不太懂,新冷熱情熄大大說的好深,看不太懂,但還是感謝各位及新冷熱情熄大大指點及教導。

    謝謝,以後再請多多指導及指教。
    2010年1月18日 上午 12:22
  • 看起來剩下的可能性就是心冷大說的了, 因為這個DLL又呼叫了另一個元件, 可能是MSComm, 所以事情就複雜了起來.
    如果真是這樣,我建議你直接找原廠商, 請他們提供底層通訊協定的格式, 直接用 .Net 內建的類別重新寫會好一點.

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年1月18日 上午 02:25
    版主
  • 請上網 download 新版的 dll , 放在system32 下  就可以了 !
    2011年4月18日 上午 09:12
  • 你好 請問一下

    為什麼我放入DllImport 時還是不行 想請各位先進幫我解答 謝謝

    這是我放的程式碼

    <DllImport("SCL_API_Stdcall.DLL")> Public Shared Function SCL_NetInitial(ByVal DevID As Integer, ByVal Password As String, ByVal IP As String, ByVal TimeOut As Long, ByVal Retry As Long, ByVal UDPPort As Integer, ByVal SCL2008 As Boolean) As Boolean

            ' Leave the body of the function empty.
        End Function

    我有把這個DLL檔放入 bin這個資料夾裡 但還是不行 他還是找不到這個dll檔

    謝謝大家

    2012年3月2日 上午 08:34
  • 你是放到 bin ? 還是 bin\debug  or bin\release ?

    總之要跟著你的執行檔在一起.


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

    2012年3月2日 上午 08:48
    版主
  • 因為型別錯、字串處理方式也要檢討,字串所對應的自動更名的 進入點 也沒強制宣告,字串所需的 ANSI/Unicode 設定也沒寫。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年3月2日 下午 12:58
  • 你好

    我是放在bin/release 這個資料夾裡 

    2012年3月6日 上午 02:27
  • 你好 

    小弟不太了解你的說法 

    請問一下型別錯 和字串處理方式也要檢討是指什麼

    對於進入點和字串的設定

    <DllImport("SCL_API_stdcall.dll", EntryPoint:="SCL_NetInitial", CharSet:=CharSet.Unicode, SetLastError:=True)>

    因為我只想要用 SCL_NetInitial這個方法 所以我進入點這樣設可以嗎?

    可以給我一些網路上的參考資料嗎 @@?

    不好意思有那麼多問題 非常謝謝你


    2012年3月6日 上午 02:32
  • [平台叫用資料型別]

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

    2012年3月6日 上午 05:46
    版主
  • 用 Dependency Walker 先確認該 dll 真實的進入點。

    至於 用 Unicode 還是 ANSI 要問原廠。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年3月6日 下午 02:26