0

Internet Explorerで使用するために.NETでActiveXコントロールライブラリ(.dll)を作成しています。これを実装IObjectSafetyし、次のようになります。

namespace ActiveXControl
{
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("ABA9D4C3-8166-440C-90C8-2FA6CD4C3C77")]
    interface ITestControl
    {
        string GetText();
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [Guid("0B3C1BB4-ED2C-4336-9E4C-72A908E74F51")]
    [ProgId("ActiveXControl.TestControl")]
    [ComDefaultInterface(typeof(ITestControl))]
    public class TestControl : UserControl, ITestControl, IObjectSafety
    {
        #region ITestControl

        public string GetText()
        {
            return "Foo";
        }

        #endregion

        #region IObjectSafety

        public enum ObjectSafetyOptions
        {
            INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001,
            INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002,
            INTERFACE_USES_DISPEX = 0x00000004,
            INTERFACE_USES_SECURITY_MANAGER = 0x00000008
        };

        public int GetInterfaceSafetyOptions(ref Guid riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
        {
            ObjectSafetyOptions m_options = ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_CALLER | ObjectSafetyOptions.INTERFACESAFE_FOR_UNTRUSTED_DATA;
            pdwSupportedOptions = (int)m_options;
            pdwEnabledOptions = (int)m_options;
            return 0;
        }

        public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
        {
            return 0;
        }

        #endregion
    }
}

これから.cabを作成し、IEで実行すると、機能します。しかし、通常のWPFデスクトップアプリを作成してアセンブリを参照すると、異常な状況が発生します。最初に参照を追加する(またはクリーンアップする)と、ActiveXControl名前空間とコントロールがVisualStudioで認識されて表示されます。ビルドするとすぐに、次のメッセージが表示されます。

名前空間名のタイプ'ActiveXControl'が見つかりません(usingディレクティブまたはアセンブリ参照がありませんか?)

コントロールと、WinFormsプロジェクトを含むいくつかのバリエーションを再構築してみました。誰かがこれが起こる理由とそれを修正するために私ができることを説明できますか?

4

1 に答える 1

0

解決策は、プロジェクトのプロパティに移動し、ターゲット フレームワークを ".NET Framework 4 Client Profile" から ".NET Framework 4" に変更することでした。その後、正常にビルド/実行されます。

于 2012-08-08T17:54:38.833 に答える