0

我有一个 .net dll,我想在我的 php 应用程序中使用
我已经在 .net 应用程序上测试了 dll,它运行良好

我的 C# 类:

namespace CryptoCs
{
    [Guid("15D16831-D6BE-43C4-AB4F-F0BAA35987DB")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("CryptoCs")]
    [ComVisible(true)]
    public class Crypto : iCryptoCs
    {
        public Crypto()
        {
        }

        public bool Login(string username, string password)
        {
            // some code
        }                                    
    }

    [Guid("5BDBB53A-571A-4EC7-B37E-A4D2A6A54DEB")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [ComVisible(true)]
    public interface iCryptoCs
    {
        [DispId(1)]
        bool Login(string username, string password);        
    }
}

我的使用代码是:

$crypto = new COM('CryptoCs.Crypto');

此页面给出此错误:

创建 COM 对象失败

我尝试使用 gacutil.exe 注册 dll,结果是:

程序集成功添加到缓存

但错误未修复

我尝试了 regasm.exe,结果是:

类型注册成功

错误仍然是一样的

我试过 REGSVR32.exe 但它给我这个错误:

找不到入口点

我在 windows server 2003 sp2 上使用 vs2010 .net4

4

1 回答 1

1

.NET 程序集的标准注册工具确实是regasm.exe,如果您不将其放入 GAC(但显然将其放入 GAC),则带有 /Codebase。

你在 php 中使用的 progid 应该和你在 .NET 中指定的一样,所以这里是“CryptoCs”,而不是“CryptoCs.Crypto”

另外,我建议您删除所有 ClassInterface 和 InterfaceType 属性,因为通常使用默认值会更好。

于 2013-05-12T06:35:19.050 回答