0

PHP アプリケーションで使用したい .net dll があります
。.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サーバー2003 SP2を使用しています

4

1 に答える 1

1

.NET アセンブリの標準登録ツールは実際にはregasm.exe であり、GAC に配置しない場合は /Codebase を使用します (ただし、明らかに GAC に配置します)。

PHP で使用する progid は、.NET で指定したものと同じでなければならないため、ここでは「CryptoCs.Crypto」の代わりに「CryptoCs」を使用します。

また、ClassInterface および InterfaceType 属性をすべて削除することをお勧めします。一般的にはデフォルトを使用する方がよいからです。

于 2013-05-12T06:35:19.050 に答える