当我尝试在VS2012中运行以下代码段时,它会按预期安装字体。但是,当我从Windows资源管理器启动应用程序时,它返回以下错误:“无法安装所需的字体:系统找不到指定的文件”
class Program
{
[DllImport("gdi32.dll", EntryPoint = "AddFontResourceW", SetLastError = true)]
public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
string lpFileName);
static void Main(string[] args)
{
string spath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\lucon.ttf";
int result = AddFontResource(spath);
int error = Marshal.GetLastWin32Error();
if (error != 0)
{
Console.WriteLine("Unable to install needed font: "+ new Win32Exception(error).Message);
Console.ReadKey();
}
else
{
Console.WriteLine((result == 0) ? "Font is already installed." : "Font installed successfully.");
}
}
}
lucon.ttf位于正确的文件夹中。当有人从Windows资源管理器启动控制台应用程序时,有人可以解释一下并帮助我让它运行吗?
答案 0 :(得分:2)
您的错误处理已损坏。 Windows通常会在函数未失败时不重置上一个错误。此外,AddFontResource()的特殊之处在于它不设置最后一个错误,请查看MSDN文章。否则GDI函数的常见行为。所以你必须这样做:
int result = AddFontResource(spath);
if (result == 0) {
Console.WriteLine("Unable to install needed font");
Console.ReadKey();
}
也可以修复pinvoke声明:
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
public static extern int AddFontResource(string lpFileName);