使用.NET写Managed用户自定义函数(UDF)C#/VB.NET
2012-03-08 15:27
423 查看
这是一个UDF例程。其中只有一个自定义函数MyFunction。
编译前先选中项目的Properties中Complie->Register for COM Interop
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Microsoft.Win32; namespace MyUDF { [Guid("41B55E1A-E91E-4024-BC41-DD5292FB8CC5")] [ClassInterface(ClassInterfaceType.AutoDual)] [ComVisible(true)] public class CSharpModule { public double MyFunction(int Width,int layes,float UponRubber, float ButtomRubber, float Length) { return Width / 1000 * (layes + (UponRubber + ButtomRubber) / 1.5) * Length; } [ComRegisterFunctionAttribute] public static void RegisterFunction(Type type) { Registry.ClassesRoot.CreateSubKey( GetSubKeyName(type, "Programmable")); RegistryKey key = Registry.ClassesRoot.OpenSubKey( GetSubKeyName(type, "InprocServer32"), true); key.SetValue("", System.Environment.SystemDirectory + @"\mscoree.dll",RegistryValueKind.String); } [ComUnregisterFunctionAttribute] public static void UnregisterFunction(Type type) { Registry.ClassesRoot.DeleteSubKey( GetSubKeyName(type, "Programmable"), false); } private static string GetSubKeyName(Type type,string subKeyName) { System.Text.StringBuilder s = new System.Text.StringBuilder(); s.Append(@"CLSID\{"); s.Append(type.GUID.ToString().ToUpper()); s.Append(@"}\"); s.Append(subKeyName); return s.ToString(); } } }编译前现在项目的Properties中Builder->Register for COM Interop
Imports System.Runtime.InteropServices Imports Microsoft.Win32 Imports System.Text <ClassInterface(ClassInterfaceType.AutoDual)> <ComVisible(True)> <Guid("207DF2C7-9773-4FB1-A50C-2A2515C3F8FA")> Public Class VBModule Public Function MyFunction(ByVal Width As Integer, ByVal Layes As Integer, _ ByVal UponRubber As Double, _ ByVal ButtomRubber As Double, _ ByVal Length As Double) As Double MyFunction = Width / 1000 * (Layes + (UponRubber + ButtomRubber) _ / 1.5) * Length End Function <ComRegisterFunctionAttribute()> Public Shared Sub RegisterFunction(ByVal Type As Type) Dim rk As RegistryKey Registry.ClassesRoot.CreateSubKey(GetSubKeyName(Type, "Programmable")) rk = Registry.ClassesRoot.OpenSubKey(GetSubKeyName(Type, "InprocServer32"), True) rk.SetValue("", Environment.SystemDirectory + "\mscoree.dll", RegistryValueKind.String) End Sub <ComUnregisterFunctionAttribute()> Public Shared Sub UnregisterFunction(ByVal Type As Type) Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(Type, "Programmable"), False) End Sub Private Shared Function GetSubKeyName(ByVal Type As Type, ByVal SubKeyName As String) As String Dim b As StringBuilder = New StringBuilder b.Append("CLSID\{") b.Append(Type.GUID.ToString().ToUpper()) b.Append("}\") b.Append(SubKeyName) GetSubKeyName = b.ToString() End Function End Class
编译前先选中项目的Properties中Complie->Register for COM Interop
相关文章推荐
- 使用.NET写Managed用户自定义函数(UDF)C#/VB.NET
- 同时使用 C# and VB.NET 在 .net 2.0 中
- .net里面照样使用 escape 和 unescape (c# csharp vb.net jscript.net)
- 如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密!
- 如何 ︰ 执行批量更新和插入使用.NET 提供程序在 C#.NET OpenXML
- 一起谈.NET技术,VB.NET和C#的发展与动态语言运行时
- 【.Net】含Unicode的字符串截断 VB.NET C#
- 一个简单的动态编译器,支持C#和VB.NET。当你想测试一些简单的代码的时候可以使用。
- (引用)使用 C# 和 C++.NET 开发的 .NET 应用程序实例列表
- NET 中,使用 GDI 来精确测量文本的实际绘出尺寸(C#)-.NET教程,C#语言
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现方法
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- C# VB.Net代码互转 使用Rosyln 支持本地转换 支持匿名表达式等等
- C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
- (原創) 我的Design Pattern之旅[7]:使用泛型改進Adapter Pattern (OO) (Design Pattern) (C/C++) (template) (.NET) (C#) (C++/CLI) (VB)
- [.NET]c#.net程序中使用ffmpeg.exe来处理视频并生成上传视频的截图
- .NET(C#) 中使用 CsGL-OpenGL .NET
- .NET产品源码保护,.NET防止反编译,c#/vb.net 防反编译
- 在C#和VB.NET下使用JS中的函数