我最近遇到了一個程序中的問題,以前工作正常。我跟蹤它到下面的代碼:使用SetDefaultDllDirectories中斷字體處理
using System.Drawing;
using System.Runtime.InteropServices;
namespace Foo
{
static class CProgram
{
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetDefaultDllDirectories(int directoryFlags);
public const int LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x000001000;
private static void Main()
{
SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
Font font = SystemFonts.DefaultFont;
}
}
}
一旦我用SetDefaultDllDirectories與任何東西,但零作爲參數的程序崩潰。我將其追溯到SafeNativeMethods.Gdip.GdipGetGenericFontFamilySansSerif(out fontfamily);它簡單地調用「GdipGetGenericFontFamilySansSerif」。但是,這個調用失敗並出現FontFamilyNotFound錯誤。
它沒有SetDefaultDllDirectories。它甚至可以工作,如果我在該電話之前和之後放置字體分配。
我的系統上是否有導致此問題的東西,還是MS的更新導致此錯誤?
系統:Win7的X64,全面更新,AMD的Radeon HD與最新的測試版驅動程序用於
背景:我需要的功能使用AddDllDirectory添加我的可執行文件路徑的子目錄(類似於C:/ MyProgram/myLibrariesX )
Hmya,這是最糟糕的一種全球變量。有兩個版本的Gdiplus.dll,你基本上*從不*需要system32的compat版本,那種方式就是龍。這是一個XY問題,它肯定比*有更好的答案*。不僅限於有意避免給Windows帶來困難,只需將DLL複製到正確的位置即可。 – 2014-09-12 23:14:11
我同意漢斯。換句話說,還有AFAIK,問題很簡單,.NET不支持對SetDefaultDllDirectories的調用。 – 2014-09-12 23:20:04
同意。你需要解決問題的根源。 – 2014-09-13 06:06:24