我试图包装一个旧的dll并遇到代表它在C#中使用的结构的问题。我尝试过的任何东西似乎都没有用。任何能够提供帮助的魔术师?
typedef struct _PARAM_BYNAME_DATA
{
n_char *szPntName; /* (in) point name */
n_char *szPrmName; /* (in) parameter name */
n_long nPrmOffset; /* (in) parameter offset */
PARvalue *pupvValue; /* (in/out) parameter value union */
n_ushort nType; /* (in/out) value type */
n_long fStatus; /* (out) status of each value access */
} PARAM_BYNAME_DATA;
如果有帮助,下面是VB端口。
Type param_byname_data
point_name As String
param_name As String
param_offset As Long
padding1 As Long 'for byte alignment between VB and C
param_value As Variant
param_type As Integer
padding2 As Integer 'for byte alignment between VB and C
status As Long status As Long
End Type
以下Delphi也是......
PARAM_BYNAME_DATA=record
PntName:pchar; // (in) point name
PrmName:pchar; // (in) parameter name
PrmOffset:longword; // (in) parameter offset
pValue:pointer; // (out) parameter value union
nType:word; // (out) value type
fStatus:longword; // (out) status of each value access */
end;
答案 0 :(得分:2)
结构应该看起来像这样......
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
public string point_name;
public string param_name;
public Int32 param_offset;
public VariantWrapper param_value;
public Int32 param_type;
public Int32 status;
};
这是一个good article,它讨论了应该有用的结构和对齐方式。主要是结构布局和位对齐。已经有一段时间了,因为我不得不用C ++编组值,但我希望这会有所帮助。