none
結構中包含有2維陣列該怎麼寫? RRS feed

  • 一般討論

  • OS: XP SP3

    IDE: VS2010 .Net Framwork 4.0

    廠商提供一隻C++寫的DLL(沒header)及VB6寫的範例。

    裡面有個function會其在VB6中的定義如下:

    Declare Sub WinDSP Lib "DLL.dll" (src As Any, map_param&, map1_data As hole_type, cdw1 As condw_type)

    其中hole_type及condw_type都是結構,其中hole_type裡面都是int的型別,而condw_type的定義如下:

    Type condw_type
        size(3, 3) As Long
        OLMS_cnt(3, 3) As Long
    End Type

    使用時

    WinDSP ByVal adsFm, wd.param(0), map1_data(0), cw

    adsFm是1個整數值(傳入)

    wd.param是一個整數的一維陣列(傳入,傳出)

    map1_data是一個hole_type的一維陣列(傳出)

    cw是一個condw_type的結構(傳入,傳出)

    這個function我在C#中定義如下:

     

    [DllImport(DllName, CharSet = CharSet.Auto, EntryPoint = "WinDSP")]
     public static extern void WinDSP(int src, int[] map_param, [In, Out] ole_type[] map1_data, ref condw_type cdw1)
    
    [StructLayout(LayoutKind.Sequential)]
     public struct condw_type
     {
     [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = UnmanagedType.I4)]
     public int[] size;
     [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16, ArraySubType = UnmanagedType.I4)]
     public int[] OLMS_cnt;
     }
    
    叫用時
    
    WinDSP(address, win.param, map1_data, ref cw);
    
    
    

     
    
    cw除了傳進一些參數外,也會傳出一些結果,我的問題是condw_type這個結構我這樣子轉不知道對不對
    因為我測試的結果,cw都沒有得到回傳結果,所以應該是不正確的。所以才上來問問看,該怎麼寫才正確?
    已經找了一整天了,對其它基本的形別都沒問題。麻煩有經驗的前輩指點一下。
    謝謝
    • 已編輯 Howard_cmit 2011年2月16日 上午 09:52 格式亂了
    • 已變更類型 小歐ouMVP, Moderator 2011年3月8日 下午 08:10 發問者沒有進一步回應
    2011年2月16日 上午 09:43

所有回覆