开发环境:VS2005 + OFFICE2003
一 用C#编写DLL程序
1)编写DLL程序
Code
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)使用签名
打开Project属性窗口,在签名选项中,新建一个后缀名为.snk的签名文件既可
注:没有签名的话,使用上没有问题,只是在注册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.
如果看到以上信息,那么,就可以在VBA中调用了。
2)编写VBA
Code
Dim obj As New Common.XmlEvent
obj.DataWrite(strXml, strServiceID, strdata)
到此,已经成功的从VBA中调用了C#DLL中的方法.
三 要注意的问题
1)DLL注册问题
直接编译程序,会自动注册你所编写的DLL的
但是如果你已经发布到客户端了,客户端没有IDE怎么办呢?
这时候就需要用到命令行来注册这个DLL.
写个Bat文件.比如RegCommon.bat,具体命令如下:
Code
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/