【问题标题】:Failed to create COM object Rfc2898DeriveBytes未能创建 COM 对象 Rfc2898DeriveBytes
【发布时间】:2013-07-19 17:06:01
【问题描述】:

我正在尝试在 php 中创建 System.Security.Cryptography.Rfc2898DeriveBytes 对象
所以我写了:

$obj = new COM('System.Security.Cryptography.Rfc2898DeriveBytes');

但我得到了:

致命错误:未捕获的异常“com_exception”和消息“失败” 创建 COM 对象 `System.Security.Cryptography.Rfc2898DeriveBytes':语法无效

这段代码有什么问题?

【问题讨论】:

    标签: php .net com


    【解决方案1】:

    您是否阅读了相关文档? PHP

    COM 类允许您实例化与 OLE 兼容的 COM 对象...

    是什么让您认为System.Security.Cryptography.Rfc2898DeriveBytes 是兼容 OLE 的 COM 类型?不是。

    它是一个 .NET 托管类。尽管它带有ComVisible 属性,但这并不能使它成为一个与 OLE 兼容的 COM 类型,您可以使用 COM 对其进行实例化。特别是,它没有默认构造函数,因此在向 COM 注册 .NET 程序集时生成的 COM 类型库中的 it is mapped to a noncreateable coclass。因此,它不能使用任何基于 COM 的机制来实例化——只能通过托管代码调用其构造函数之一。除此之外,它的命名空间限定名称太长而不能成为 COM ProgId。

    如果你想通过 PHP COM 类来利用这个 .NET 类,你可以在 .NET 托管代码中编写一个包装类,该类与 OLE 兼容并且具有默认构造函数的 ComVisible,并通过它转发你的调用。

    【讨论】:

    • “包装类”是我想要摆脱的东西,无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 2013-04-10
    • 1970-01-01
    • 2011-08-18
    • 2015-06-20
    • 2011-03-05
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多