2010-09-10 158 views
0

嗨,必须使用DLL。 在Java中,我们使用这个:Java指针与C#IntPtr

Public interface CLibrary extends Library { 
    CLibrary INSTANCE = (CLibrary) 
    Native.loadLibrary("are32.dll", 
    CLibrary.class); 
    Pointer ENCRYPT(String a, int ai, String b, int bi); 
} 

... 

Pointer ptr1 = CLibrary.INSTANCE.ENCRYPT("TEST",5,"TEST",5); 
for (int i=0;i<6;i++) 
    System.out.println((ptr1.getByte(i)& 0xFF)); 

你能帮我找到在C#中的等价吗? 我用IntPtr,但我找不到像Java一样的ReadByte。

[DllImport("are32.dll",)] 
    public static extern IntPtr ENCRYPT(string p1, int p2, string p3, int p4); 

... 

var retPtr = ENCRYPT("TEST", 5, "TEST", 5); 

如何从retPtrReadByteIntPtr是否等于Pointer

感谢您的帮助

回答

2

使用

byte b = System.Runtime.InteropServices.Marshal.ReadByte(retPtr); 

你也可以用一个单一的通话填补你的5字节数组:

const int arrSize = 5; 
byte[] arr = new byte[arrSize]; 
System.Runtime.InteropServices.Marshal.Copy(retPtr, arr, 0, arrSize); 
+0

是有一个网站,我们可以学习所有这些事情呢? – 2010-09-10 10:18:05

+2

是的,StackOverflow :) – Timwi 2010-09-10 10:40:03

+1

MSDN /谷歌。一个非常棒的组合。 – Dykam 2010-09-10 15:04:47