0

情况如下:

我们为我们的站点运行了经典的 ASP。我们有 VB6 DLL,在 ASP 中作为 COM 对象运行。

我已经转移到 Visual Studio 2008。我正在尝试创建可以在 ASP 中使用的 DLL,就像使用 VB6 一样(Server.CreateObject(""))。不幸的是,虽然注册成功,但我得到一个: “在检查权限时调用 Server.CreateObject 失败。访问此对象被拒绝。” 错误。

我进行了大量研究,发现您必须使用“regasm”注册 VB.NET DLL(我这样做了),您还需要勾选相应的(“使程序集 COM-Visible”)框。

然而,通过我所有的努力,我似乎​​已经没有运气了。为了在 VB.NET 中创建 COM DLL,我确实阅读了一些关于使用名为“COM 类”的类模板的内容,但我在模板选择中没有该选项。

所以我的问题是,我是否更改为 Visual Studio(非快速获取 COM 类模板,如果是,那肯定可以吗?)

或者

有什么我做的不对吗?

请注意迁移到 ASP.NET 不是一种选择,也不是在 VB6 中编程。

谢谢!

编辑

经过大约一整周的搜索,对于找到此页面的任何人,我都找到了答案:http: //social.msdn.microsoft.com/Forums/en-US/9f84bdf7-aace-4a57-a3e4-3863a0efb647/how -to-create-comvisible-dll-that-i-can-use-from-vba-using-vs-express-2008-beta-2

4

2 回答 2

0

伙计,您必须阅读很多有关 .net 的信息。

你不能只写一个 .net dll 然后在经典的 asp 中使用它。这是两种完全不同的技术。

它与 Visual Studio 完全无关。Visual Studio 只是开发环境,与您的 .net 框架或 Web 应用程序完全无关。您不能使用 Visual Studio > 版本 6 进行 vb6 编程。因此您无法使用 Visual Studio 2008n 或 2010 或 2003 或 2005 创建 vb6 dll。

您可以编写 .net dll 并在经典的 asp 或任何其他 com 感知技术中使用它们。但它们仍然是需要 .net 框架的 .net dll。它们只是可见的。

这有点复杂但可能:您的类和方法必须是“com 可见的”,您可以通过在[ComVisibleAttribute( true )] 您的类声明之前和您希望成为 com 可见的每个方法之前使用 Attribute 来实现这一点。例子:

[ComVisibleAttribute( true )]
public class Helper {
    public Helper() {
    }

    [ComVisibleAttribute( true )]
    public object parseDate( string strDate ) {
        return (object)DateTime.Parse( strDate ).ToString( "dd.MM.yyyy HH:mm:ss" );
    }
}

你必须为你的类使用一个空的构造函数!

此外,您必须在项目属性-> 程序集信息中检查“Assemlby Com 可见”或打开 Properties/AssemblyInfo.cs 并添加以下行:

[assembly: ComVisible( true )]
[assembly: Guid( "e2e1670d-1f90-4948-98be-27cc820b4675" )]

构建 dll 后,您必须使用 ragasm.exe 在注册表中注册 .net dll。(默认情况下,正常的 .net dll 是注册表中的注释寄存器。

你可以这样做:

%windir%\Microsoft.NET\Framework\v4.0.30319\regasm.exe path/and/Name/of/your.dll /codebase

你必须确保你想要的 .net 框架的路径是正确的。

之后,您必须重新启动 iis,然后才能使用经典 asp 中的 .net dll 方法。

请注意,您只能将简单数据类型的值传递和返回到您的 .net 方法,从/到 clasic asp,如字符串、int 等。

于 2013-08-02T12:55:54.073 回答
0

回答:

http://social.msdn.microsoft.com/Forums/en-US/9f84bdf7-aace-4a57-a3e4-3863a0efb647/how-to-create-comvisible-dll-that-i-can-use-from-vba-使用-vs-express-2008-beta-2

  1. 构建 .dll,并以 .NET Framework 3.5 为目标,使其 COM 可见。

  2. 使用与 Visual Studio 2008 Beta 2(因此 >.NET Framework 3.5)一起安装的 GAC 实用程序 - 它位于 C:\Program FIles\Microsoft SDKs\Windows\V.0A\bin 中 - 放置生成的 . dll到GAC

  3. 使用我在 c:\Windows\Microsoft.NET\framework\V2.0.50727 中找到的 regsam.exe 文件 > 注册生成的 .dll。

  4. 使用我在 C:\Program FIles\Microsoft SDKs\Windows\V.0A\bin 中找到的 tlbexp.exe 文件 >.export a .tlb 文件

  5. 在 VBA IDE 中,使用 Tools->References 浏览到 .tlb 文件并选择它作为 >addtional 引用。

问题是我没有做第 2 步或第 4 步。我希望这对将来的人有所帮助,因为我花了很长时间才解决。

于 2013-08-06T10:21:07.767 回答