2014-01-13 31 views
-1

結構定義不安全的結構無法訪問的錯誤

[StructLayout(LayoutKind.Sequential, Pack = Compile.PackSize)] 
    unsafe struct DB_PREPLIST 
    { 
    public TxnUnion txn; 
    public fixed byte gid[DbConst.DB_XIDDATASIZE]; 
    } 

無法訪問的錯誤

enter image description here

問題

當我嘗試改變DB_PREPLISTpublic我得到另一個錯誤:

指針和固定大小緩衝區只能在不安全的上下文中使用

回答

0

This reply通過Tony The Lion回答你的問題: 基本上,你需要用代碼調用不安全結構在「不安全」的塊,即

unsafe 
{ 
    //your code 
} 

(編輯),你還需要將public訪問修飾符添加到您的結構,否則不安全或不,你不會是AB le訪問它(除非它嵌套在調用它的類中)。

+0

我認爲這是錯誤的路要走。標記這樣的結構公衆通常是不可取的。 – PMF

1

所有需要DB_PREPLIST參數的方法都需要在代碼中是私有的。公開DB_PREPLIST在技術上是可行的,但風格很糟糕,因爲您需要將所有呼叫站點標記爲不安全。更好地將所有調用與另一個純C#結構作爲參數進行包裝,並使您的委託爲私有。在這種特殊情況下,這可能意味着您必須通過包裝將呼叫重定向到委託。