歡迎光臨 pure C# 技術社群. 登入註冊

pure C# 技術社群

- Microsoft .NET Framework 相關技術非官方討論社群 -

請問C#呼叫不同語言開發的其它DLL的函數時,函數的參數有二維陣列時,該如何處理?

  • 1
  • [第1/1頁 共3項]
#1

請問C#呼叫不同語言開發的其它DLL的函數時,函數的參數有二維陣列時,該如何處理?

  • a
 0.0 (0 人評價)

請問C#呼叫不同語言開發的其它DLL的函數時,函數的參數有二維陣列時,該如何處理?

因為我要呼叫對方DLL函數的參數中包含了一個結構(對方的DLL要求的):

例如:typedef struct _somestruct
{
   unsigned char Ver[3];
   unsigned char MyID[3];
}somestruct;

如果結構中的項目是一維的陣列,用這種方式定義一個結構就可以用來傳接:
public struct mystrc {
   [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] MyID;
   [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] Ver;
}

但如果今天對方DLL要求的參數中,中有不規則的陣列,例如:
typedef struct _somestruct
{
   unsigned char Ver[3];
   unsigned char MyID[3];
   unsigned char Voice[3][5]; //不規則維度...
}mystruct;

那麼在我的C#中要如何定義才可以?

另外下列網址是微軟MSDN找到的相關文章 "陣列的預設封送處理"
http://msdn.microsoft.com/zh-tw/library/z6cfh6e6(VS.80).aspx
算是對我處理這個問題幫助相當大的文章,
但還是沒能完全解決,拜托各位有經驗的大大,能不吝指教,分享一下,感恩啊!


  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息


贊助商連結

#2

Re: 請問C#呼叫不同語言開發的其它DLL的函數時,函數的參數有二維陣列時,該如何處理?

  • a
 0.0 (0 人評價)
好像可以這樣寫
public struct mystrc {
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] Ver;
   [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public byte[] MyID;
   [MarshalAs(UnmanagedType.LPArray, SizeConst = 15)] public char[,] Voice;
}
因為你沒有提供那個dll所以我只能用"想"的
沒辦法實際測試可有錯

老闆, 請給我提神用的細肩帶小女孩不加辣, 謝謝
  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#3

Re: 請問C#呼叫不同語言開發的其它DLL的函數時,函數的參數有二維陣列時,該如何處理?

  • a
 0.0 (0 人評價)
感謝M大的回覆:

其實這個方法我試過了,還是不行:
[MarshalAs(UnmanagedType.LPArray, SizeConst = 15)] public char[,] Voice;

另外我也試過:
[MarshalAs(UnmanagedType.LPArray, SizeConst = 15)] public char[] Voice;

[MarshalAs(UnmanagedType.LPArray, SizeConst = 15)] public char[][] Voice;
這種方式,雖然編譯會過,但是實際執行時,都會發生格式不符的問題~

另外我還試過其它一些方法,目前還在努力中,
如果有結果再跟各位大大分享!

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息
  • 1
  • [第1/1頁 共3項]