【问题标题】:ActiveX component can't create object COM interopActiveX 组件无法创建对象 COM 互操作
【发布时间】:2017-09-02 05:32:36
【问题描述】:

我有一个要求,我必须在经典 ASP 中对图像使用 base64 编码

所以我在 C# 项目中创建了一个非常简单的类项目并试图使其 COM 可见,我已经阅读了有关 stackoverflow 的所有指南和各种其他问题,但我仍然无法使用 vbscript 来创建对象

程序集被标记为 ComVisible,输出被标记为注册 COM 互操作,我的类源:

namespace Crypto
{
    [ComVisible(true)]
    [Guid("ad491fe9-ade0-46a1-bae0-d407a987a9e9"),ClassInterface(ClassInterfaceType.None)]
    public class Base64
    {
        public Base64() {
            //default com exposable constructor
        }

        public string Base64Encode(string filePath) {

            if (!File.Exists(filePath)) return "";

            using (Image image = Image.FromFile(filePath))
            {
                using (MemoryStream m = new MemoryStream())
                {
                    image.Save(m, image.RawFormat);
                    byte[] imageBytes = m.ToArray();

                    // Convert byte[] to Base64 String
                    string base64String = Convert.ToBase64String(imageBytes);
                    return base64String;
                }
            }
        }
    }
}

构建后,我将其注册为 cominterop 并使用

无论如何都放入 GAC
regasm *<file path>* /codebase /tlb
gacutil -i *<file path>*

一切都注册成功

当我从测试经典 asp 页面调用时

set obj = CreateObject("Crypto.Base64")

我明白了

Microsoft VBScript runtime error '800a01ad'

ActiveX component can't create object: 'Crypto.Base64'

大约 7 到 8 年前,我在 .Net 2.0 中与 ComInterop 合作过,一切都很顺利,我不明白在这种情况下出了什么问题

在我的开发机器上,是windows 10 pro 64-bit,目标编译是4.6.2 Framework

【问题讨论】:

标签: c# vbscript asp-classic com-interop


【解决方案1】:

感谢@Lankymart 为我指明了正确的方向

即使 COM 可公开的 .NET 程序集是针对 32 位/64 位编译的 32 位应用程序仍需要在应用程序池高级设置中启用才能正常工作

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 2015-06-20
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多