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