×
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Contact US

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

C# : how to handle huge data generated by a dll written in C

C# : how to handle huge data generated by a dll written in C

C# : how to handle huge data generated by a dll written in C

(OP)
I have a dll written in C code to I use in my C# project.
One returned data structure is like this :
#define WV_MAX_TREND_PARAMETERS 60
#define WV_MAX_TREND_SAMPLES 1501
#define WV_MAX_TIME_CHANGES 24
#define WV_MAX_TREND_HOURS 25
#define WV_LABEL_SIZE 20


typedef struct
{
WV_PARAMETER_ID WvParameterID[WV_MAX_TREND_PARAMETERS]; ;
CHAR Label[WV_MAX_TREND_PARAMETERS][WV_LABEL_SIZE];
int NumberOfTrends;
} WV_TREND_LIST_A;


typedef struct
{
WV_PARAMETER_ID WvParameterID; // parameter id
CHAR Label[WV_LABEL_SIZE]; // label in english
WV_NET_UNITS_OF_MEASURE Units;
CHAR Values[WV_MAX_TREND_SAMPLES][WV_VALUE_SIZE];
} WV_TREND_PARAMETER_DATA_A;
typedef struct
{
WV_TREND_PARAMETER_DATA_A Trend [WV_MAX_TREND_PARAMETERS];
int NumberOfTrends;
int NumSamples;
time_t SampleTimes[WV_MAX_TREND_SAMPLES];
time_t TimeChanges[WV_MAX_TIME_CHANGES];
int NumTimeChanges;
} WV_TREND_DATA_A;

The claas I finally used is as follow :

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public unsafe struct WV_TREND_LIST_A
{
public fixed int WV_Trend_ParameterID[60];
public fixed byte ParamLabel[1200];
public int NumberOfTrends;
}

public unsafe struct WV_TREND_PARAMETER_DATA_A
{
public int paramID;
public fixed byte ParamLabel[20];
public int units;
public fixed byte values[30020];
}
public unsafe struct WV_TREND_DATA_A
{
public WV_TREND_PARAMETER_DATA_A Trend0;
public WV_TREND_PARAMETER_DATA_A Trend1;
public WV_TREND_PARAMETER_DATA_A Trend2;
public WV_TREND_PARAMETER_DATA_A Trend3;
public WV_TREND_PARAMETER_DATA_A Trend4;
public WV_TREND_PARAMETER_DATA_A Trend5;
public WV_TREND_PARAMETER_DATA_A Trend6;
public WV_TREND_PARAMETER_DATA_A Trend7;
public WV_TREND_PARAMETER_DATA_A Trend8;
public WV_TREND_PARAMETER_DATA_A Trend9;
public WV_TREND_PARAMETER_DATA_A Trend10;
public WV_TREND_PARAMETER_DATA_A Trend11;
public WV_TREND_PARAMETER_DATA_A Trend12;
public WV_TREND_PARAMETER_DATA_A Trend13;
public WV_TREND_PARAMETER_DATA_A Trend14;
public WV_TREND_PARAMETER_DATA_A Trend15;
public WV_TREND_PARAMETER_DATA_A Trend16;
public WV_TREND_PARAMETER_DATA_A Trend17;
public WV_TREND_PARAMETER_DATA_A Trend18;
public WV_TREND_PARAMETER_DATA_A Trend19;
public WV_TREND_PARAMETER_DATA_A Trend20;
public WV_TREND_PARAMETER_DATA_A Trend21;
public WV_TREND_PARAMETER_DATA_A Trend22;
public WV_TREND_PARAMETER_DATA_A Trend23;
public WV_TREND_PARAMETER_DATA_A Trend24;
public WV_TREND_PARAMETER_DATA_A Trend25;
public WV_TREND_PARAMETER_DATA_A Trend26;
public WV_TREND_PARAMETER_DATA_A Trend27;
public WV_TREND_PARAMETER_DATA_A Trend28;
public WV_TREND_PARAMETER_DATA_A Trend29;
public WV_TREND_PARAMETER_DATA_A Trend30;
public WV_TREND_PARAMETER_DATA_A Trend31;
public WV_TREND_PARAMETER_DATA_A Trend32;
public WV_TREND_PARAMETER_DATA_A Trend33;
public WV_TREND_PARAMETER_DATA_A Trend34;
public WV_TREND_PARAMETER_DATA_A Trend35;
public WV_TREND_PARAMETER_DATA_A Trend36;
public WV_TREND_PARAMETER_DATA_A Trend37;
public WV_TREND_PARAMETER_DATA_A Trend38;
public WV_TREND_PARAMETER_DATA_A Trend39;
public WV_TREND_PARAMETER_DATA_A Trend40;
public WV_TREND_PARAMETER_DATA_A Trend41;
public WV_TREND_PARAMETER_DATA_A Trend42;
public WV_TREND_PARAMETER_DATA_A Trend43;
public WV_TREND_PARAMETER_DATA_A Trend44;
public WV_TREND_PARAMETER_DATA_A Trend45;
public WV_TREND_PARAMETER_DATA_A Trend46;
public WV_TREND_PARAMETER_DATA_A Trend47;
public WV_TREND_PARAMETER_DATA_A Trend48;
public WV_TREND_PARAMETER_DATA_A Trend49;
public WV_TREND_PARAMETER_DATA_A Trend50;
public WV_TREND_PARAMETER_DATA_A Trend51;
public WV_TREND_PARAMETER_DATA_A Trend52;
public WV_TREND_PARAMETER_DATA_A Trend53;
public WV_TREND_PARAMETER_DATA_A Trend54;
public WV_TREND_PARAMETER_DATA_A Trend55;
public WV_TREND_PARAMETER_DATA_A Trend56;
public WV_TREND_PARAMETER_DATA_A Trend57;
public WV_TREND_PARAMETER_DATA_A Trend58;
public WV_TREND_PARAMETER_DATA_A Trend59;
public int NumberOfTrends;
public int NumSamples;
public fixed int SampleTimes[1501];
public fixed int TimeChanges[24];
public int NumTimeChanges;
}

The code used is as follow and works until it comes to the last part
getTheTrendsData procedure
when intensiating the Trend data
WV_TREND_DATA_A TrendData = new WV_TREND_DATA_A();
and generates a stack overflow


public void GetTheListOfTrends()
{
WV_TREND_LIST_A TrendList = new WV_TREND_LIST_A();
int numberOfTrends = 0;
try
{
int returnTrendList = NATIVE_WV.WvGetAvailableTrends_A(connectionID, ref TrendList);
numberOfTrends = TrendList.NumberOfTrends;
}
catch (Exception error)
{
error.GetType();
}
Lbx_TrendList.Items.Clear();
Lbx_TrendList.Items.Add("Number of Trends = " + numberOfTrends.ToString());
Lbx_TrendList.Items.Add(" --------------------------------------------- ");
Lbx_TrendList.Items.Add(" ");
for (int i = 0; i < numberOfTrends; i++)
{
int paramID = 0;
String label;
unsafe
{
byte[] b = new byte[20];
// Pin the buffer to a fixed location in memory.
paramID = TrendList.WV_Trend_ParameterID[i];
for (int j=0; j< 20; j++)
{
int index = i*20+j;
b[j]= TrendList.ParamLabel[index];
}
label = System.Text.ASCIIEncoding.ASCII.GetString(b);
}
Lbx_TrendList.Items.Add("Trend Id number " + i.ToString() + " = " + paramID.ToString() +
" Label = " + label);
}

int totalhours = 1;

getTheTrendsData(connectionID, totalhours, TrendList);
}

private void getTheTrendsData(int connectionID, int totalhours, WV_TREND_LIST_A TrendList)
{
// get the actual trends
WV_TREND_DATA_A TrendData = new WV_TREND_DATA_A();


try
{
//Get all the trends
int returnTrendData = NATIVE_WV.WvGetTrendData(connectionID, ref TrendData, totalhours, ref TrendList);
}

catch(Exception error)
{
MessageBox.Show(error.Message);
}

Can anybody help me ?

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members! Already a Member? Login

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close