AlexesDad - I guess you are using the built-in super restrictive guest account on your home PC? Try it on a typical PC in your working environment.
To be very frank, I am really tired of sticking on this point endlessly. Firstly, this will be an issue only if it cause practical problem (e.g. your traders/sales cannot load the DLL). Secondly, even if it indeed requires admin right during first-time install, is it really a show-stop?
For sure, no people will stop using Excel simply because installing Excel will for sure require admin right. (Otherwise people probably cannot use any application, even Windows/Unix/MacOS whatever) People likes Excel because of its functionality. Similarly, the reason I personally like the C# approach is because of its simplicity (~10 lines of code) and powerfulness. You have already seen this list below on Wilmott. I copied here for the benefit of other readers who haven't seen this because that Wilmott thread has become far too long.
I will love to have the following convenience at the cost of register once. Tell me if you really believe the cost of register over-weights these functional benefits ... even if register indeed is a one-time hassle.
-------------------------------------------------------------------------------------------------------------------------
1. input cell reference (as you haven't answered this question, i assume xlw cannot do --- though as I said, it's really a surprise to me)
why it is useful:
a] EWB asked this question initially, so presumably it is useful to him
b] When writing an array UDF, it is helpful to raise exception if the given input is too small to hold the output (because people may miss some results which is serious). At the same time, if the given cell range is too large, it is better to clean up them instead of showing #N/A. This is not only because of nice looking, but #N/A is a headache for VBA code to handle
c] In a complicated sheet, it is extremely helpful to indicate the exact location (i.e. row and col) of the original offending cell, if there is any error
2. auto-data type recognition
From user friendliness and convenience, I want to allow a same UDF to take a hard date (e.g. 2009/7/20), an offset against today (e.g. 91) or a symbolic date (e.g. IMM, 3M etc) in the same date input parameter. So for example, given a function MyValuationFunction(ValueDate, .....), the following should all be valid:
=MyValuationFunction(#2009/07/20#, ....)
=MyValuationFunction(1, ...) // value as of tomorrow
=MyValuationFunction("IMM", ...) // value as of next IMM date
...
3. The possibility of delivering a single component which contains UDF and other functionality.
For many other components, e.g. a RTD component, it usually will requires some utility functions (ideally exposed as UDFs) to pre- / post- process the data and maybe inquiry the internal status. So it will be very useful to include some UDFs in that component, instead of supplying two separately components.
4. I want to make sure the breakpoint I set can always be reached during a debug session, no matter how crap input data is.
The list can go very long. And you can tell whether they are practically useful.
-----------------------------------------------
Here is another example of practical headache (I met it again today!) which the native C# approach can handle much easier and more intuitively - date format (and by extension number format, unicode string etc). US and UK have different date formats, continental Europe has different number formats, let alone those string encoding used in Far East etc. Of course, we can enforce a standard and blame users for errors. But in reality, different machines have different configurations and different people may have strong natural habits (acquired from his daily life outside these pricing sheets). When there is error, whatever the reason is, it may cost money, wast time and bring frustration. How nice it will be if all these difference can be handled automatically for us, and very importantly, for free. This is exactly what a native C# approach can offer.