for C# you need the msxml parser of the dot net framework
(maybe that is not even called msxml, I am not sure)
Invalid class string is what you get when you have this function in C# in msxml4 standalone
in msxml6 the message would be: C# is not a scripting language :-)
either move to the XSLTransform of the .net framework
or use JScript in msxml4
The JScript variant would be
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="
XSLT namespace"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:fubar="testing"
extension-element-prefixes="fubar"
exclude-result-prefixes="msxsl"
>
<xsl

utput method="xml" indent="yes"/>
<msxsl:script implements-prefix="fubar" language="JScript">
<![CDATA[
function exampleCall( str ){return str;}
]]>
</msxsl:script>
<xsl:template match="/">
<ps>
<xsl:apply-templates/>
</ps>
</xsl:template>
<xsl:template match="person">
<p><xsl:value-of select="fubar:exampleCall(name/last_name)" /></p>
</xsl:template>
</xsl:stylesheet>
note that I added a template to create a container element, otherwise your result is not wellformed
I changed @name into name/last_name, since name is not an attribute
and I excluded the msxsl namespace from propagating to the output