我们有一台特定的Vista x64机器,在运行我们的C#WinForms应用程序时,会显示以下错误:
System.EntryPointNotFoundException:无法在DLL"ComCtl32"中找到名为"TaskDialogIndirect"的入口点.
这个相同的代码在其他Vista机器上运行良好.出于某种原因,这台特殊的Vista机器总是抛出这个例外.
我们该如何解决这个问题?
我的程序在应用程序中使用气球通知气泡来引导用户,在Windows XP中,气球窗口在右上角几乎没有'X',以便在单击时关闭窗口,如果单击其中的任何位置,窗口也会关闭,即使你不要点击'X'.
但是,当程序在Windows Server 2008上运行时,气球会出现,但没有"X"按钮,当我点击它们时也不会关闭.
偶然我设法通过删除包含以下内容的.MANIFEST文件来复制Windows XP中的行为:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="2.0.0.0" processorArchitecture="x86" name="SofrwareName" type="win32" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="<Removed>" language="*" processorArchitecture="x86" />
</dependentAssembly>
</dependency>
</assembly>
Run Code Online (Sandbox Code Playgroud)
当我删除此清单并在Windows XP中运行我的程序时,气球的行为就像它在Windows Server 2008中一样.我假设这可能意味着某种与Windows Server 2008中的Common Controls v6不兼容.
有没有人知道什么可能导致气球不能在点击时关闭并且没有'X'关闭按钮?
更新:这是气球创建代码:
m_tool = new MessageTool(); //internal class MessageTool : NativeWindow {...}
CreateParams cp = new CreateParams();
cp.ClassName = TOOLTIPS_CLASS; //TOOLTIPS_CLASS = "tooltips_class32";
cp.Style =
WS_POPUP |
TTS_BALLOON |
TTS_NOPREFIX |
TTS_ALWAYSTIP |
TTS_CLOSE;
m_ti = new TOOLINFO(); …Run Code Online (Sandbox Code Playgroud)