2012-08-08 50 views
0

我在.NET中创建了一个用于Internet Explorer的ActiveX控件库(.dll)。它实现IObjectSafety,看起来与此类似:自定义ActiveX .NET控件无法在WinForms/WPF项目中识别

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桌面应用程序并引用程序集时,我遇到了一个不寻常的情况:当我第一次添加引用(或者做一个干净的)时,命名空间和控件在Visual Studio中出现。当我建我得到的消息:

“ActiveXControl” cound找不到命名空间名称的类型(是 你缺少using指令或程序集引用?)

我我试图重建控件和一些变体,包括一个WinForms项目。有人可以解释为什么发生这种情况,我能做些什么来解决它?

+1

[C#Visual Studio 2010突然无法看到名称空间的可能重复?](http://stackoverflow.com/questions/4880685/c-sharp-visual-studio-2010-suddenly-cant-see-namespace) – 2012-08-08 17:01:08

+0

我的项目设置有点不同,但是为我解决了这个问题。谢谢! – 2012-08-08 17:53:20

回答

0

解决方案是进入项目属性并将目标框架从“.NET Framework 4 Client Profile”更改为“.NET Framework 4”。之后,它建立/运行良好。

相关问题