想把ASP系统里的一些数据库操作封装到DLL里,然而VB已不记得怎么用了,其他语言基本不会,因此选用C#。之前以为写个类文件然后编译成DLL就可以用regesvr32来导入了,到头来才发现原来不行。哎。。。对DLL的知识知之甚少,后来听说可以写成COM+组件,于是找了些这样的资料。接下来贴出对我帮助较大的一篇帖子,再记录下我在制作过程中碰到的问题
以下引用自:http://blog.youkuaiyun.com/eglic/archive/2006/03/16/626152.aspx
一个实例过程:
--------------------------
1、启动VS.Net 2003,新建一个C# DLL项目,项目名称输入TestDll
2、在TestDll项目的Class1.cs里面输入以下代码:
using System;
using System.Runtime.InteropServices;
namespace TestDll
{
[Guid("93FFB6A2-4B32-4546-B19F-C3D5DB22E57F")]
public interface ISample{
[DispId(0)] string About();
[DispId(1)] int Add(int a,int b);
}
public class Sample : ISample{
public Sample(){}
public string About() {return "欢迎访问 http://www.eglic.com";}
public int Add(int a, int b) {return a+b;}
}
}
4、运行 sn -k TestDll.snk (sn.exe这个文件在 D:/Program files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin)这样就生成了一个 TestDll.snk文件
5、在工程的解决方案资源管理器里面,双击AssemblyInfo.cs 修改 [assembly: AssemblyKeyFile("TestDll.snk")] (原来是 "" ,把文件名输入)
6、编译这个工程,生成 Bin/Debug/TestDll.dll,在控制台窗口进入这个目录
7、输入下面的命令:regasm /tlb:TestDll.tlb TestDll.dll 注册DLL,并生成一个tlb文件
tlb是给VB开发使用的,可以不要这个
8、继续在控制台里运行这个:gacutil /i TestDll.dll 把这个Dll加入全局Assembly Cache(实际上可以不要,在RegAsm里面已经自动加入了,为了保险,我还是操作一次)
9、在ASP里面引用这个,代码如下:
<%
Dim o : Set o=Server.CreateObject("TestDll.Sample")
Response.Write o.About() & "<br />"
Dim a,b : a=123 : b=456
Response.Write a & " + " & b & "=" & o.Add(a,b)
Set o=Nothing
%>
页面输出为:
欢迎访问 http://www.eglic.com
123 + 456=579
----------------
注意:
1、每个类名对应一个接口名,接口名是类名前加上一个大写的I,推荐这么做
2、尽量使用通用的数据类型
3、GUID生成的时候,选择注册表类型,然后要去掉前后的花括号
4、尽量不要使用多线程
5、如果编译为Release模式,上面所说的所有目录,都把Debug替换成Release