案例1:
int i;
int* pi = &i;
案例2:
int i;
IntPtr pi = &i;
两种情况都相同吗?
我的目的是: -
在VB6应用程序上: -
更多代码:
string aString = text;
byte[] theBytes = System.Text.Encoding.Default.GetBytes(aString);
// Marshal the managed struct to a native block of memory.
int myStructSize = theBytes.Length;
IntPtr pMyStruct = Marshal.AllocHGlobal(myStructSize); //int* or IntPtr is good?
try
{
Marshal.Copy(theBytes, 0, pMyStruct, myStructSize);
...............
答案 0 :(得分:1)
根据msdn页面: -
IntPtr类型可以由支持指针的语言使用,也可以作为在支持指针和不支持指针的语言之间引用数据的常用方法。
IntPtr对象也可用于保存句柄。例如,IntPtr的实例在System.IO.FileStream类中广泛用于保存文件句柄。
这两种情况都是不同的吗?
不,他们不一样,
不同之处在于IntPtr
forex
int i = 10 ;
int *pi = i ;
int c = *pi ; // would work
但要做同样的事情,你必须将IntPtr
强制转换为int *
int i =10 ;
IntPtr pi = &i ;
int *tempPtr = (int*)pi ;
int c = *tempPtr ;
IntPtr
的内部表示与void*
类似,但它像整数一样公开。只要您需要存储非托管指针并且不想使用不安全的代码,就可以使用它。
它有两个限制:
void*
)