嘿所有这些是我第一次为经典的asp页面创建一个COM对象。
创建此COM DLL时我遵循的过程是:
1)使用强名称工具(sn.exe)并将.snk文件放在应用程序中。 (sn -k myKey.snk)
2)补充:
[assembly: AssemblyKeyFile(@"myKey.snk")]
[assembly: ComVisible(true)]
到AssemblyInfo.cs。我在KeyFile上得到了一个警告:
使用命令行选项'/ keyfile'或相应的项目设置 而不是'AssemblyKeyFile'
3)从管理员处获得以下内容:SDK命令提示符:
tlbexp c:\\temp\\dll\\classicASPWSEnDecrypt.dll /out:c:\\temp\\dll\\classicASPWSEnDecrypt.tlb
regasm /tlb:c:\\temp\\dll\\classicASPWSEnDecrypt.tlb c:\\temp\\dll\\classicASPWSEnDecrypt.dll
gacutil /i c:\\temp\\dll\\classicASPWSEnDecrypt.dll
regasm c:\\temp\\dll\\classicASPWSEnDecrypt.dll /codebase
所有注册都没有错误。
在我的经典ASP页面中,我有:
<%
Dim classicEnDecrypt
Set classicEnDecrypt = Server.CreateObject("classicASPWSEnDecrypt.Class1")
response.write(classicEnDecrypt.Encrypt("testing"))
%>
我发现 ProgID (使用OLEView)是Class1,如下所示:
我的C#代码(只是一个剪辑)是这样的:
namespace classicASPWSEnDecrypt
{
public class Class1
{
public string Encrypt(string PlainText)
{
[code here]
}
public string Decrypt(string EncryptedText)
{
[code here]
}
}
}
在我的本地计算机(IIS7 / Windows 7 Enterprise)上运行ASP页面后,出现此错误:
Microsoft VBScript运行时错误“800a01b6”
Object不支持此属性或方法:'Encrypt'
/contactupdateWS.asp,第49行
我不知道为什么当我知道我没有加密功能时呢?
我能错过什么?
答案 0 :(得分:3)
我已在评论中提供了一些信息。
我也觉得你不应该有静态方法。似乎com不支持静态方法。
http://msdn.microsoft.com/en-us/library/ms182198.aspx
此外,您正在使用Server.CreateObject方法创建类的对象,因此很明显您应该有此实例方法。
public class Class1
{
public string Encrypt(string PlainText)
{
[code here]
}
public string Decrypt(string EncryptedText)
{
[code here]
}
}
希望得到这个帮助。