在PHP中使用.net DLL作为.com失败

本文关键字:DLL 作为 com 失败 net PHP | 更新日期: 2023-09-27 18:12:45

我有一个。net dll,我想在我的php应用程序
我已经在。net应用程序上测试了dll,它工作得很好

my c# class:

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 .net

在PHP中使用.net DLL作为.com失败

. net程序集的标准注册工具确实是regasm.exe,如果你不把它放在GAC中(但你显然把它放在GAC中),则使用/Codebase。

你在php中使用的progid应该与你在。net中指定的相同,所以"CryptoCs",而不是"CryptoCs"。加密"

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