在php中使用.net dll作为com失败

时间:2013-05-09 12:56:47

标签: c# php .net com

我有一个.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,但它却抓住了这个错误:

  

找不到入口点

我在使用vs2010 .net4

的Windows Server 2003 sp2上

1 个答案:

答案 0 :(得分:1)

.NET程序集的标准注册工具确实是regasm.exe, with /Codebase,如果你没有把它放在GAC中(但你明显地把它放在GAC中)。

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

另外,我建议你删除所有ClassInterface和InterfaceType属性,因为最好一般使用默认值。