VB6的2維陣列轉成C#的2維陣列

  • 2658
  • 0

摘要:VB6的2維陣列轉成C#的2維陣列

最近在使用1隻廠商提供的DLL(用C++寫的原生DLL)

沒有header只有dll跟VB6的範例,在使用其中一個function時,發現怎麼結果跟vb6的都不一致

即使是輸入的值跟參數都一樣,但回傳的結果怎麼都不一樣。

這個問題困擾了我1天半,天呀,時間緊迫,光1個function就浪費我1天半,我情何以堪。

最後經測試後發現,原來是vb6與c#的二維陣列的宣告方式跟本就不一樣。

VB6中的function宣告

 

 

Declare Sub cDSP1LineGraph Lib "kotech3DLL.dll" (ByRef src As Byte, ByRef param&, ByRef dest As Long, ByVal scw As Long, ByVal wnw As Long, ByVal t As Long)

VB6中的使用

Dim W, X As Long
    Dim param(9) As Long
    Dim byteArray() As Byte
    Dim intResult() As Long
    
    W = 1000
    ReDim byteArray(W - 1, 2)
    ReDim intResult(W)

    For X = 0 To W - 1
      If (X >= (W / 2 - 1) And X <= (W / 2 + 1)) Then
        byteArray(X, 0) = 100
        byteArray(X, 1) = 100
        byteArray(X, 2) = 100
      End If
    Next X
    
    param(0) = 0
    param(1) = W - 1
    param(2) = 0
    param(3) = 0
    param(4) = 125000
    param(5) = -param(4)
    param(6) = 0
    param(7) = 0
    param(8) = 2000000000
    param(9) = 2000000000

cDSP1LineGraph byteArray(0, 0), param(0), intResult(0), W, W, 65

==================================================================

C#中的宣告

[DllImport(DllNameCharSet = CharSet.AutoEntryPoint = "cDSP1LineGraph")]
public static extern void cDSP1LineGraph(byte[,] srcint[] paramint[] destint scwint wnwint t);

C#中的使用

      int w = 1000;
      byte[,] byteArray = new byte[3 ,w];
 
      for (int x = 0; x < wx++)
      {
        if(x >=(w/2 -1) && x <= (w/2 +1))
        {
          byteArray[0, x] = (byte)(100);
          byteArray[1, x] = (byte)(100);
          byteArray[2 ,x] = (byte)(100);
        }
      }
      int[] param = new int[10];
      param[0] = 0;
      param[1] = w - 1;
      param[2] = 0;
      param[3] = 0;
      param[4] = 125000;
      param[5] = -param[4];  
      param[6] = 0;
      param[7] = 0;
      param[8] = 2000000000;
      param[9] = 2000000000;
      int[] intResult = new int[w+1];
 
      cDSP1LineGraph(byteArrayparamintResultww, 65);

注意VB6及C#程式碼中的2維陣列的差異
從沒寫過VB的我, 這個差異,弄了我一天半。以後不要再叫我弄這種不同語言的東西了啦。
頭好痛。

============ 以下是簽名檔 ============

一個小小螺絲釘。

第一次建立Blog,希望以後能慢慢充實它。

Howard