Presentation is loading. Please wait.

Presentation is loading. Please wait.

VBA to C: Pratfalls and Perils XLDevC London 2012

Similar presentations


Presentation on theme: "VBA to C: Pratfalls and Perils XLDevC London 2012"— Presentation transcript:

1 VBA to C: Pratfalls and Perils XLDevC London 2012
Charles Williams Decision Models 1996 Author of FastExcel Co-author of Name Manager VBA to C - Pratfalls and Perils 20/09/2018

2 VBA to C: Pratfalls & Perils
FastExcel functions 8000 lines of VBA/VB6 Automation UDFs Excel 2010 64-bit Multi-threading/ multiple cores VB6 is dead-end My journey from VBA to C VBA to C - Pratfalls and Perils 20/09/2018

3 Expectation Steep Learning Curve Memory Management Pointers
Low level Language Excel SDK Buggy Poorly documented Uses complex Oper data structure VBA to C - Pratfalls and Perils 20/09/2018

4 So minimise learning curve using
Planatech XLL+ Visual Studio 2010 C++ Primer Plus Stephen Prata XL Add-in Development in C++ Steve Dalton VBA to C - Pratfalls and Perils 20/09/2018

5 XLL+ Function Wizard VBA to C - Pratfalls and Perils 20/09/2018

6 XLL+ Function Wizard VBA to C - Pratfalls and Perils 20/09/2018

7 C Code with Equivalent VBA
double AvTolXLL2_Impl(const CXlOper* theNumbers, double theTolerance) { // End of generated code //}}XLP_SRC // TODO - set the value of xloResult, or return another value // using CXlOper::RetXXX() or throw a CXlRuntimeException. RW12 nRows=0; // Dim nRows as long COL12 nCols=0; // Dim nCols as long double dTemp=0.0,dAvTol=0.0; // Dim dTemp as double, dAvTol as double RW12 Counter=0; // Dim Counter as long // theNumbers is pointer to oper value array (P)// vArr=theNumbers.Value2 // get num of rows cols in input data theNumbers->GetDims(nRows,nCols); //nRows=Ubound(vArr)nCols=Ubound(vArr,2) // loop thru the input data for (RW12 i=0; i<=nRows-1; i++) // For i=0 To nRows-1 Step 1 // curly brackets for a block of statements // get value, (zero if not converted to double) dTemp=theNumbers->Cell(i,0).ToDouble(); // dTemp=cdbl(vArr(i+1,1) //compare to the tolerance if (fabs(dTemp)>theTolerance) // If Abs(dTemp)>theTolerance Then dAvTol += dTemp; // dAvTol=dAvTol+dTemp Counter++; // Counter=Counter+1 }; // End If }; // Next i // return value if neither are zero: // ! means NOT && means AND || means OR if (dAvTol != 0.0 && Counter != 0) // If dAvtol<>0.0 and Counter<>0 then return dAvTol/Counter; // AvTolXLL2=dAvtol/Counter Else // else return 0.0; // AvTolXLL2=0.0 ‘Note the ; ends the IF } // End Function VBA to C - Pratfalls and Perils 20/09/2018

8 The Journey so far … STL/BOOST/XLL+/VS2010
High-level language, rich framework But lot to learn Memory management not yet needed Performance is good Creating simple UDFs is easy … VBA to C - Pratfalls and Perils 20/09/2018

9 Things I don’t (yet) understand
Strings XLL & Excel Locales Passing data between VBA & C Oper data structure Binary Names Asynchronous functions VBA to C - Pratfalls and Perils 20/09/2018


Download ppt "VBA to C: Pratfalls and Perils XLDevC London 2012"

Similar presentations


Ads by Google