110,538
社区成员
发帖
与我相关
我的任务
分享
[StructLayout(LayoutKind.Sequential)]
public struct AesCtx
{
//指定AesCtx结构的封送处理
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 372)]
public byte[] space;
}
public enum BlockMode
{
BLOCKMODE_ECB = 0,
BLOCKMODE_CBC,
BLOCKMODE_PCBC,
BLOCKMODE_OFB,
BLOCKMODE_CFB,
BLOCKMODE_CRT
}
public class LibWrap
{
//ref指示使用引用传递数组,可输入及输出
//[In]指示使用仅可输入的值传递,可省略
//key和initialVector直接定义为数组,Interop会进行默认封送处理
[DllImport("MyDll.dll")]
public static extern void AesSetKey(ref AesCtx aesCtx, [In] BlockMode blockMode, [In] byte[] key, [In] byte[] initialVector);
}
static void Main(string[] args)
{
AesCtx aesCtx = new AesCtx();
aesCtx.space = new byte[372];
byte[] key = new byte[1];
byte[] initialVector = new byte[1];
LibWrap.AesSetKey(ref aesCtx, BlockMode.BLOCKMODE_ECB, key, initialVector);
}