Hi Isac,
Welcome to the Forum.
Only one data array is returned from an external function call. Such is life! To avoid having to rewrite the code for the upper and lower bands, pass an argument selecting which to return? Another way is to write another .dll which is called by the external function .dll (you might even consider writing all the functionality in libraries which are compatible with both MT4 and MS?). To avoid having indicators computed multiple times, why not exploit the RAM on the users machine and store the results from the first computation(s) and retrieve these from memory when needed?
Here's an interesting problem, try to recreate the IndicatorCounted() function for MS and apply this in your code! (there is not much actual need for this function as MS only has a max of 65500 bars per chart where MT4 can have so much more information, that the time taken to process the limited MS information is still short enough for intraday and intrabar trading, but it makes for an interesting challenge whilst learning about writing codes for MS).
Hope this helps.
wabbit
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim."
Edsgar W. Dijkstra
MS: 6.52 EOD, 7.x EOD, 8.0 PRO, 9.2 PRO w/QC, 10 PRO w/QC C, 11 PRO w/QC & MDK
For custom MetaStock programming : http://www.wabbit.com.au
My SkyPE status : 
My SkyPE account : wabbit.com.au