Vba 如何调用c# 函数
先看三个网站
1 https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/interop/example-com-classCOM 类示例2 vba调用c#dll_weixin_30656145的博客-CSDN博客 vba调用c#dll 3 https://docs.microsoft.com/zh-cn/dotnet/framework/tools/regasm-exe-assembly-registration-tool Regasm.exe(程序集注册工具)COM注册命令 实例:代码 using System; using System.Runtime.InteropServices; using System.Text; namespace ClassLibrary6 { public class Class1 { [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")] public interface ComClass1Interface { [DispId(1)] double Fwj(double x1, double y1, double x2, double y2); } [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface ComClass1Events { } [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(ComClass1Events))] public class ComClass1 : ComClass1Interface { public double Fwj(double x1, double y1, double x2, double y2) { double Fwj; double PI = 3.1415926; double dx = x2 - x1; double dy = y2 - y1 +0.0000000001; Fwj = PI - Math.Sign(dy) * PI /2 - Math.Atan(dx / dy); return Fwj; } } } } 注册com在视图终端中输入 sn –k ClassLibrary6.snk 对com进行注册 在ClassLibrary6目录下生成一个 ClassLibrary6.snk,把ClassLibrary6.snk拷贝到 ClassLibrary6目录下的ClassLibrary6文件中 打开AssemblyInfo.cs。在里面加入[assembly:AssemblyKeyFile("ClassLibrary6 项目属性->应用程序->程序集信息->选中“使程序集COM可见 项目属性->生成->选中“为COM互操作注册” 生成解决方案 在debug文件中生成三个文件 file:///C:/Users/flz/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png 在代码中new 一个对象就可以调用这个c#的函数了。
Sub jjj()
Dim o As New ClassLibrary6.ComClass1
s = o.Fwj(1, 1, 10, 10)
MsgBox s
End Sub
|