Forgot to mention that it does not create a failure when it happens. I have attached the build file that i used to create the dll and i have pasted my c++ code to verify that i am allocating memory correctly. Thanks
long PulsesPerRev=0, *pDataSize, ErrorCode=0, Size=0, Speedlen, Timelen;
double SampleRate=0, Value, MinOrder=0, MaxOrder=0, OrderResolution=0;
double RpmOffset=0, RpmMult=0, QntOffset=0, QntMult=0, OrdOffset=0, OrdMult=0;
float VibValue, TachValue, SpeedProfileRPM, SpeedProfileTime;
int32 i=0, j=0, k=0;
unsigned short int iWindowType, iActWinType = 0;
int iInstance, iWindowLength, iActWinLen = 0, NumofSamples=80000, nrows =2000, ncols = 2000;
TD1Hdl HdlData, HdlTach;
TD2 InputWinInfo, ActualWinInfo;
TD3 OrderRange;
TD4Hdl HdlSpecMap; //Spec Map (intensity plot data)
TD5Hdl HdlSpeed, HdlTime;
TD6 RpmScale, OrdScale, QntInfo;
// Set values
InputWinInfo.windowLength = iWindowLength;
InputWinInfo.windowType = iWindowType;
// Set values
ActualWinInfo.windowLength = iActWinLen;
ActualWinInfo.windowType = iActWinType;
// Set values
OrderRange.MinOrder = MinOrder;
OrderRange.MaxOrder = MaxOrder;
OrderRange.Resolution = OrderResolution;
OrdScale.multiplier = OrdMult;
OrdScale.offset = OrdOffset;
RpmScale.multiplier = RpmMult;
RpmScale.offset = RpmOffset;
QntInfo.multiplier = QntMult;
QntInfo.offset = QntOffset;
// Allocate memory for spectral Map
HdlSpecMap = (TD4Hdl) DSNewHandle(sizeof(TD4Hdl));
error = DSSetHandleSize(HdlSpecMap, sizeof(long)*2 + nrows*ncols*sizeof(double) );
if (error != mFullErr && error != mZoneErr)
{
(*HdlSpecMap)->dimSizes[0] = nrows;
(*HdlSpecMap)->dimSizes[1] = ncols;
}
else {
AfxMessageBox("Unable to allocate memory");
}
// Allocate memory for speed profile arrays
HdlData = (TD1Hdl) DSNewHandle(sizeof(TD1Hdl));
error = DSSetHandleSize(HdlData, sizeof(long) + NumofSamples*sizeof(double) );
HdlTach = (TD1Hdl) DSNewHandle(sizeof(TD1Hdl));
error = DSSetHandleSize(HdlTach, sizeof(long) + NumofSamples*sizeof(double) );
Speedlen = 5000;
Timelen = 5000;
// Allocate memory for Vibration Data and Tach Data
HdlTime = (TD5Hdl) DSNewHandle(sizeof(TD5Hdl));
error = DSSetHandleSize(HdlTime, sizeof(long) + Timelen*sizeof(double) );
HdlSpeed = (TD5Hdl) DSNewHandle(sizeof(TD5Hdl));
error = DSSetHandleSize(HdlSpeed, sizeof(long) + Speedlen*sizeof(double) );
// Alocate memory for data size
pDataSize = (long *) DSNewPtr(sizeof(long));
// Read in Data from file
FILE *stream;
char line[100];
stream=fopen( "C:\\OrderAnalysis.txt", "r" );
while (fgets( line, 100, stream ) != NULL)
{
sscanf( line, "%f %f",&VibValue, &TachValue);
(*HdlTach)->elt[i] = TachValue;
(*HdlData)->elt[i] = VibValue;
i++;
}
fclose(stream);
(*HdlTach)->dimSize = i;
(*HdlData)->dimSize = i;
OrderAnalysis(&HdlData, &HdlTach,
&InputWinInfo, SampleRate, PulsesPerRev,
&OrderRange, &ActualWinInfo, &HdlSpecMap, &HdlSpeed,
&HdlTime, &RpmScale, &OrdScale,
&QntInfo, pDataSize);