3

Javascriptを使用して呼び出す必要のあるac#クラスライブラリがあります。以下はC#クラスのコードです。

using System;
using System.Collections.Generic;
using System.Text;

using System.Runtime.InteropServices;
using System.Windows.Forms;               //required for message box. 

namespace csharp.activex.sample
{       
        [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        InterfaceType(ComInterfaceType.InterfaceIsDual),
        ComVisible(true)]
    public interface IHello
    {
        [DispId(1)]
        int ShowDialog();
    };
    [
        Guid("873355E1-2D0D-476f-9BEF-C7E645024C32"),
        ProgId("csharpAx.CHello"),
        ClassInterface(ClassInterfaceType.None),
        ComDefaultInterface(typeof(IHello)),
        ComVisible(true)
    ]
     public class CHello : IHello
    {
        #region [IHello implementation]
        public string Hello()
        { 
           return "Hello from CHello object";
        }
        public int ShowDialog()
        {
            System.Windows.Forms.MessageBox.Show("C# is awesome");
            return 0;
        }
        #endregion
    };

    public class Class1
    {
            public void showDialog() {
                MessageBox.Show("Visual c# is awesome!");
            }
    }
}

クラスをビルドすると、c:\DLLにコピーしたdllファイルが取得されます。以下のコードは、DLLを登録するために使用されます

regasm C:\DLL\ActiveXClass.dll /codebase /tlb

メッセージタイプが正常に登録されました。

次のJavaScriptコードを使用してhtmlファイルを作成します。

<!DOCTYPE HTML>
<html>
       <head>
              <meta http-equiv="X-UA-Compatible" content="IE=edge">
              <script type='text/javascript'>
              var myAx1;
              function startService(){
                  myAx1 = new ActiveXObject("csharpAx.CHello");
                  if(myAx1 != null)
                 {
                      myAx1.showDialog();  
                 }

                  else{
                      alert("failed");
                  }

                  return false;
              }
              </script>
       </head>
       <body class="sapUiBody" role="application">
              <div id="content"></div>
              <a href='#' onclick='return startService()'>StartService</a><br />
       </body>
</html>

このようにして得られた結果ページで、サービスの開始をクリックします。しかし、「失敗」や「Visual C#は素晴らしい」などのアラートは表示されません。

助けてください

4

2 に答える 2

4

私はそれを解決しました。これを行うには、activex のセキュリティ オプションを有効にする必要があります。

詳細については、このリンクを確認してください http://www.aras.com/Community/forums/p/2527/7698.aspx

于 2012-12-07T08:37:59.207 に答える
2

最善の解決策は、IObjectSafety を実装することだと思います。activex を信頼している場合は、ユーザーにインターネット オプションをチェックさせる必要はありません。ポイント5のこのリンクは、その方法を説明しています:http://www.olavaukan.com/2010/08/creating-an-activex-control-in-net-using-c/

于 2013-05-24T09:21:52.847 に答える