我正在尝试在php中创建System.Security.Cryptography.Rfc2898DeriveBytes对象 所以我写道:
$obj = new COM('System.Security.Cryptography.Rfc2898DeriveBytes');
但我得到了:
致命错误:未捕获的异常'com_exception',消息'失败 创建COM对象 `System.Security.Cryptography.Rfc2898DeriveBytes':语法无效
这段代码有什么问题?
答案 0 :(得分:0)
您是否阅读过相关文档? 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,并通过它转发你的调用。 / p>