The documentation for the api says that the "argument must point to a
ZIP4_PARM structure".
My main concern is that since I don't know how the C function (in the dll)
accesses the struct (assuming it does it in C-style), how is it going to
know that the nested struct is not nested in the new struct? The CD with the
DLL comes from the US Postal Service, so I'm pretty sure it's compatible
with C#.
Also, one of the members of this struct is another struct (ADDR_REC) that's
composed three members of type char. How would I add this member of type
ADDR_REC to this struct?
In Parms.cs:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct ZIP4_PARM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=4)]
string rsvd0;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=51)]
public string iadl1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=51)]
public string iadl2;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=51)]
public string ictyi;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=3)]
public string istai;
/**** This is the member I need to add. Would it use a MarshalAs? ****/
ADDR_REC stack[10];
public foot footer;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
struct foot
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1)]
public string a;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1)]
public string b;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1)]
public string c;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1)]
public string d;
}
"Angel" <none> wrote in message
news:OJ**************@tk2msftngp13.phx.gbl...
I'm using several C functions (in a dll) that receive a struct as
parameter. Since I'm doing it in C#, I assume I need to recreate the struct in C# in
order to call the function with the required parameter. What would I need
to do in order to convert a struct that looks like this:
typedef struct
{
char rsvd0[4];
char iadl1[50+1];
char iadl2[50+1];
char ictyi[50+1];
struct { //nested struct
char a;
char b;
char c;
} foot;
ADSR_REC stack[10];
char rsvd4[194];
} DIR_PARM;
into a C# struct? I'm already able to call functions w/o parameters from
my application (through DllImport) but I'm having trouble calling a function
that requires this struct as parameter. And the "real" structure is
declared in Header file that I can't access (with #include). If I were
doing the program in C/C++ I would only need to include this header file and the
argument has to point to the struct. And how would I access
DIR_PARM.foot.a ?
Any help would be appreciated.