开发环境:VS2005 + OFFICE2003 一 用C#编写DLL程序 1)编写DLL程序 using System; using System.IO; using System.Xml; using System.Text; using System.Runtime.InteropServices; using System.Collections; namespace Common { [Guid("694C1820-04B6-4988-928F-FD858B95C880")] /// <summary> /// XML生成 /// </summary> public interface XmlEvent_Interface { [DispId(1)] int DataWrite(String filePath, String serviceID, ref String[] tag); [DispId(2)] String[] DataRead(String filePath); } // Events interface Database_COMObjectEvents [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface XmlEvent_Events { } [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(XmlEvent_Events))] /// <summary> /// XML生成 /// </summary> public class XmlEvent : XmlEvent_Interface { public XmlEvent() { } public int DataWrite(String filePath, String serviceID, ref String[] tag) { //Do Something; } public String[] DataRead(String filePath) { //Do Something; } } } 2)项目属性配置 打开Project属性窗口,在Build选项中,将Register for COM interop设置为True。 注:有了这个设定,在EXCEL中才能看到DLL中的方法 3)使用签名 注:没有签名的话,使用上没有问题,只是在注册DLL的时候会出现警告. 4)编译既可生成Common.dll和Common.tlb的文件. 二 在VBA中调用DLL 1)引用设定 打开VBA的编辑窗口(快捷键为ALT+F11),在菜单栏中,Tools->References,弹出References窗口, 点击Browse,找到Common.tlb这个文件,选择它,然后点OK。此时已经成功引用到Common.dll。 在VBA的Object Browser中可以看到Library中有Common. 2)编写VBA Dim obj As New Common.XmlEvent obj.DataWrite(strXml, strServiceID, strdata) 到此,已经成功的从VBA中调用了C#DLL中的方法. 三 要注意的问题 直接编译程序,会自动注册你所编写的DLL的 但是如果你已经发布到客户端了,客户端没有IDE怎么办呢? 这时候就需要用到命令行来注册这个DLL. 写个Bat文件.比如RegCommon.bat,具体命令如下: path %path%;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\; regasm Common.dll /codebase 这里主要就是用了regasm这个命令,为了执行方便,所以在第一行对Path做了修正. 把这个bat文件放到和dll文件在一个目录下执行一下,就OK了. 2)补丁问题 如果你按我上边说的,从VBA调用DLL时,出错的话,尝试一下打下面的补丁 vs2005-kb908002-enu-x86.exe 参照及下载地址:http://support.microsoft.com/kb/908002/ 分类: DotNet 标签: VBA 调用 DLL |
|
来自: 昵称13965638 > 《待分类1》