2011-07-20 30 views
3

在我的C#應用​​程序中,我有IntPtr y = VoidPointer(x);其中VoidPointer(x)是一個返回void *(void指針)的非託管函數。問題是我沒有得到y在C#代碼中指出的正確值。我使用Marshal.ReadInt32(y)並試圖ReadByteReadInt64等下面是代碼片段,
託管函數在C:我們如何訪問C#中C指針指向的值?

void* VoidPointer() 
{ 
    int Var1 = 7113; 
    return &Var1; 
} 

在C#
管理功能:(使用的DllImport訪問非託管函數)

IntPtr z = VoidPointer(); 

Console.WriteLine(" z = {0} ", Marshal.ReadInt32(z)); 

但是在輸出中,我沒有得到7113.我怎樣才能在C#中訪問Var1的正確值?

+0

作爲,嘗試定義的C整數靜態和你發佈的代碼再試一次。 –

回答

6

VoidPointer返回一個指向局部變量的指針,該函數在結束時超出範圍。這是未定義的行爲。

嘗試VAR1聲明爲靜態:每Henrik的回答和隨後的評論

void* VoidPointer() 
{ 
    static int Var1 = 7113; 
    return &Var1; 
} 
+0

Argghh,應該在發佈相同的東西之前完整地閱讀你的答案; P +1 – leppie

+0

@Henrik如果OP將其定義在靜態範圍內,他目前使用的代碼是否工作? –

+1

@亞當:是的,我認爲靜態詮釋變量= 7113;會工作。 – Henrik