I'm not sure what problem you are having, but the interop code that you are using doesn't look right. I am not sure about the output type (DBL waveform) since you are casting it as an array. However, here is an example I wrote and tested that calls a VI with 4 string inputs and one DBL array output. If you are using a LV Waveform type, then realize that the output isn't a simple array but a complex type. In fact, the type of the output element is System.__ComObject.
If the vi is indeed outputing a waveform then consider using the "Get Waveform Components" to break it into simplier data types (t0, delta, array) which are automatically marshaled for you (as in the example below). If you can't change the VI or create a wrapper VI that does the breakout for you, let me know and we can talk about access the waveform object in C#.
---------------------------------------------------------
LabVIEW.Application lv = new LabVIEW.ApplicationClass();
LabVIEW.VirtualInstrument vi = lv.GetVIReference("c:\\temp\\activex.vi", "", true, 5);
vi.ShowFPOnCall = true;
String[] paramNamesArray = new String[5];
paramNamesArray[0] = "InputOne";
paramNamesArray[1] = "InputTwo";
paramNamesArray[2] = "InputThree";
paramNamesArray[3] = "InputFour";
paramNamesArray[4] = "Array";
Object paramNames = paramNamesArray;
Object[] paramValsArray = new Object[5];
paramValsArray[0] = "Here is one";
paramValsArray[1] = "Here is two";
paramValsArray[2] = "Here is three";
paramValsArray[3] = "Here is four";
paramValsArray[4] = new Double[0];
Object paramVals = paramValsArray;
vi.Call(ref paramNames, ref paramVals);
// Convert the object reference back to the array - remember it was
// an ref parameter so on the return paramValsArray and paramVals point
// to different objects
paramValsArray = (Object[])paramVals;
Double[] results = (Double[])paramValsArray[4];
for(Int32 i=0; i
{
Console.WriteLine("{0} = {1}", i, results[i]);
}