create a struct with a fixed length array of bytes and some single bytes in C# then marshal it as an

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
I Searched, I cant find an exact answer.
Im creating a C# wrapper dll (namespace and class) marshaling for a Delphi driver dll.
Constraints:
I cant use fixed keyword as I am tryin not to use any "unsafe" calls in my managed C# wrapper of a dll.
The dll cant be changed.
Basically I have a func that takes a pointer to an array of bytes. I can get this to work fine. However the practiclal way to do this for our customers is to allow then to create a struct with an array in it as is done in our C++ , C builder,
Delphi, and VB 6.0 samples. My problem is having a fixed or variable length array inside a struct in C#. (without using "fixed")
I cant seem to get a constructor to do this either???
I could use a class instead of struct if i have to?
This is the C++ code equivelant Im trying to emulate:
struct TUSBAI1616Config<br/>
{<br/>
byte ChannelRange[16];<br/>
byte CalibMode;<br/>
byte TrigMode;<br/>
byte StartStopCH;<br/>
byte Oversample;<br/>
};
This is then passed to the dll as a paameter by refference and is treated like an array of 20 bytes which works fine in C++.
ZeroMemory(&Config, sizeof(Config));<br/>
Config.CalibMode = 0; //Take actual data, not internal calibration sources.<br/>
Config.TrigMode = 5; //Scan selected channels each counter rising edge.<br/>
Config.Oversample = 0;//No oversample.<br/>
ConfigBufSize = sizeof(Config);<br/>
ADC_SetConfig (DeviceIndex, &Config, &ConfigBufSize);
Heres my latest C# code attempt, commented code didnt work:
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small struct<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#2b91af; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
{
<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#2b91af; font-size:x-small <span style="font-family:Consolas; color:#2b91af; font-size:x-small <span style="font-family:Consolas; color:#2b91af; font-size:x-small TUSBAI1616Config<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
Config = <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small new<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#2b91af; font-size:x-small <span style="font-family:Consolas; color:#2b91af; font-size:x-small <span style="font-family:Consolas; color:#2b91af; font-size:x-small TUSBAI1616Config<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small public<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small []
configArray = <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small new<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small byte<span style="font-family:Consolas; font-size:x-small


I cant get the array inside the struct to be a fixed lenght of 16 or dynamically set it with a constructor without errors??
Then heres an attempt to initialize the sstruct elements and copy/convert to an array and pass it to the dll.
This throws an exception because the array is still NULL. Also if anyone has a cleaner way to conver the struct to an array let me know. Ill work on that next, once I get the 16 byte sub array to work.
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
Config.CalibMode = 0;

<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
Config.TrigMode = 5;

<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
Config.Oversample = 0;

<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
ConfigBufSize = 20;

<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small

<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small

<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small for<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
(<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small int<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small for<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
(<span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small int<span style="font-family:Consolas; font-size:x-small


<span style="font-family:Consolas; color:#2b91af; font-size:x-small <span style="font-family:Consolas; color:#2b91af; font-size:x-small <span style="font-family:Consolas; color:#2b91af; font-size:x-small AIOUSB<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small .ADC_SetConfig(DeviceIndex,
configArray, <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small <span style="font-family:Consolas; color:#0000ff; font-size:x-small out<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
ConfigBufSize);
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small Any
suggestions would be greatly appreciated.
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small Can
i make a 16 byte array a type then use it as a member of the struct?
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small Can
a List help? Would a class allow me to do this? Collection?
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small Ill
keep searching, reading, struggling, testing....
<span style="font-family:Consolas; font-size:x-small <span style="font-family:Consolas; font-size:x-small Thanks in advace :)
<
Thanks, Richard

<span style="font-family:Consolas; font-size:x-small i = 0; i < 16; i++)



{
configArray = Config.ChannelRange;
}
configArray[16] = Config.CalibMode;
configArray[17] = Config.TrigMode;
configArray[17] = Config.StartStopCH;
configArray[18] = Config.Oversample;

<span style="font-family:Consolas; font-size:x-small



<span style="font-family:Consolas; font-size:x-small i = 0; i < 16; i++)



{
Config.ChannelRange = 0; // exception!
}
<span style="font-family:Consolas; font-size:x-small



<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small // temp copy struct to array for dll call: ($$$Hack)

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small // sizeof(Config);

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //No oversample.

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //Scan selected channels each counter rising edge.

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //Take actual data, not internal calibration sources.

<span style="font-family:Consolas; font-size:x-small [20];

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small // temp array for Config dll call:

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //Config.ChannelRange = new byte[nDimension];

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //int nDimension = 16;

<span style="font-family:Consolas; font-size:x-small ();<span style="font-family:Consolas; font-size:x-small






<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //public TUSBAI1616Config Config;

<span style="font-family:Consolas; font-size:x-small Oversample;


}
<span style="font-family:Consolas; font-size:x-small



<span style="font-family:Consolas; font-size:x-small StartStopCH;<span style="font-family:Consolas; font-size:x-small






<span style="font-family:Consolas; font-size:x-small TrigMode;<span style="font-family:Consolas; font-size:x-small






<span style="font-family:Consolas; font-size:x-small CalibMode;<span style="font-family:Consolas; font-size:x-small






<span style="font-family:Consolas; font-size:x-small [] ChannelRange;<span style="font-family:Consolas; font-size:x-small






<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //}

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //ChannelRange = new ChannelRange[size];

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //{

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small //TUSBAI1616Config(int size)

<span style="font-family:Consolas; color:#2b91af; font-size:x-small


<span style="font-family:Consolas; color:#2b91af; font-size:x-small TUSBAI1616Config

<span style="font-family:Consolas; color:#008000; font-size:x-small


<span style="font-family:Consolas; color:#008000; font-size:x-small // Struct for Config:

View the full article
 
Back
Top