我有以下结构:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WAVEHDR
{
internal IntPtr lpData; // pointer to locked data buffer
internal uint dwBufferLength; // length of data buffer
internal uint dwBytesRecorded; // used for input only
internal IntPtr dwUser; // for client's use
internal uint dwFlags; // assorted flags (see defines)
internal uint dwLoops; // loop control counter
internal IntPtr lpNext; // reserved for driver
internal IntPtr reserved; // reserved for driver
}
Run Code Online (Sandbox Code Playgroud)
我需要分配非托管内存来存储上面结构的实例.指向此结构的指针将传递给waveOut win32 api函数(waveOutPrepareHeader,waveOutWrite,waveOutUnprepareHeader).
Marshal.AllocHGlobal()
或Marshal.AllocCoTaskMem()
?有什么不同?我在C#.Net应用程序的一个水晶报告中添加了一个条形码字体,它在开发中运行良好并显示结果.但是当我创建安装文件并将其安装在另一台PC上时,条形码字体显示为英文字母的简单字体,尽管我已经安装了条形码字体.
那么在安装我的应用程序后,请你帮我在exe上显示条码字体?
我在资源中嵌入了一个.ttf字体文件(特别是“ Amatic Bold”),并在下面使用此代码获取字体。我在这篇文章中尝试了以下代码:如何在C#应用程序中嵌入字体?(使用Visual Studio 2005)
这是我的实现:
static public Font GetCustomFont (byte[] fontData, float size, FontStyle style)
{
if (_fontCollection == null) _fontCollection = new PrivateFontCollection();
IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length);
System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
_fontCollection.AddMemoryFont(fontPtr, fontData.Length);
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
return new Font(_fontCollection.Families[0], size, style);
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
Font font = GetCustomFont(Properties.MainResources.Amatic_Bold, 25, System.Drawing.FontStyle.Bold);
Run Code Online (Sandbox Code Playgroud)
问题是字体正在加载,但使用时无法正确显示。它看起来像“ Arial”或其他标准字体,而不是应有的字体。如果我将字体安装在Windows中,则可以正常工作(我想很明显...)
我搜索了现有的答案,但找不到确切的问题...
任何帮助将不胜感激。提前致谢。
嗨,
我想将自己的字体用于文本框,而无需在客户端计算机中安装它.我希望它驻留在我的程序文件应用程序文件夹中.[我知道大多数游戏应用程序都使用自己的字体].我该怎么做 ?
谢谢.