che*_*nwq 1 c# delphi pinvoke struct record
我在delphi中有一个嵌入式记录,如下所示:
TKernel = packed record
State: Integer;
end;
TKernels = array[0..19] of TKernel;
TShell = packed record
Kernels: TKernels;
end;
Run Code Online (Sandbox Code Playgroud)
在这,
SizeOf(TShell) = 20 * SizeOf(TKernel).
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用C#:
struct Shell
{
Kernel[] Kernels;
public Shell(int i = 20)
{
Kernels = new Kernel[20];
}
}
Run Code Online (Sandbox Code Playgroud)
然后:Marshal.SizeOf(Shell)== 4
这意味着内核只是一个指针.我想互操作C#与德尔福,所以我需要有存储结构是一样的,所以我应该如何申报在C#中的结构,除了写20个喜欢内核KernelOne的; 内核内核两个......
如果可能的话,我总是会避免不安全,因为不安全的代码是不安全的.在这种情况下,很有可能避免:
[StructLayout(LayoutKind.Sequential, Pack=1)]
struct Kernel
{
int State;
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
struct Shell
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=20)]
Kernel[] Kernels;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
678 次 |
| 最近记录: |