2013-02-06 18 views
0

我在C++/CLI包裹DLL的方法(C++)。我正在使用VC++ 2010的x86 windows-xp機器。__ptr32到pin_ptr給出編譯錯誤在x64配置

我的C++/CLI項目中有x86和x64配置。

我在64只得到一個編譯錯誤。這裏是代碼段

struct A 
{ 
    int data; 
    A *__ptr32 next; 
} 

pin_ptr<A *>pinned = &obj->next; // A obj 

上面的行被編譯僅在86配置。 在64 IM我得到一個編譯錯誤:can't convert A * to pin_ptr <Type>

編譯器選項:/ CLR

+0

爲什麼你在64位平臺上使用32位指針? – szx

+0

很多事情沒有做這個代碼的意義。從固定明顯不是託管對象引用的東西開始。因此,擺脫,首先,然後開始思考你將如何獲取A *更新到__ptr64。 –

回答

1

__pt32約束指針到32位指針,僅適用於x86的。

64適用於64位指針...

只是刪除尺寸約束,並使用它像一個普通的指針:

struct A 
    { 
    int data; 
    A* next; 
    } 
+0

我具有其中如所提到的A定義DLL。所以我需要重建該dll。這是唯一的方法嗎? – user1939578

+0

x64體系結構採用64個指針。一個32位指針是無效的,因爲它可能會傳遞一個不適合32位的內存地址... –