2010-09-10 3 views
0

Привет, мне нужно использовать dll. В Java мы используем это:Java Pointer vs 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, но я не могу найти ReadByte, как Java.

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

... 

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

Как я могу ReadByte от retPtr? IntPtr: 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

есть сайт, где можно узнать все эти вещи? –

+2

Yep, StackOverflow :) – Timwi

+1

MSDN/Google. Очень большая комбо. – Dykam