نقل قول: قرار دادن فونت در dll
باسلام
البته شما در تالار سی شارپ این سوال را مطرح کردید و در این سیستم من فقط وی بی دات نت نصب است و دسترسی به IDE سی را ندارم ، لذا کدها را در زبان وی بی دات نت تست کردم و جواب داد و برایتان به زبان وی بی دات نت گذاشتم که از این بابت عذرخواهی میکنم
نقل قول:
1- چطور میتونم این فونت رو داخل فایل dll قرار بدم. من فونت رو ریختم تو resources ولی خطا داد. مشکل چیه. چه حوری میشه اینکارو کرد؟
شدنش که میشه 100 %
ابتدا یک فونت را که در سیستمتان نصب نیست را کپی و در قسمت ریسورسیز پروژه پیست کنید
Imports System.Drawing.Text
Imports System.Runtime.InteropServices
Private myFonts As PrivateFontCollection
Private fontBuffer As IntPtr
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If myFonts Is Nothing Then
myFonts = New PrivateFontCollection
Dim font() As Byte = My.Resources.IranNastaliq
fontBuffer = Marshal.AllocCoTaskMem(font.Length)
Marshal.Copy(font, 0, fontBuffer, font.Length)
myFonts.AddMemoryFont(fontBuffer, font.Length)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Label1.Font = New Font(myFonts.Families(0), 16, FontStyle.Regular)
End Sub
نقل قول:
2- چه جوری میشه یه فایل dll رو داخل dll گذاشت. (تو کامپوننت من از یه کامپوننت دیگه استفاده شده)
باید توجه داشته باشید که بعضی دی ال ال ها که رابط گرافیکی و آبجکت و فرم دارند را نمیتوان به ریسورس انبدد کرد (عنایت داشته باشید که عرض کردم بعضی دی ال ال ها)
اما من اکثر دی ال هایی که فقط از توابعشون استفاده میکنم و رابط گرافیکی ندارند ، را به فایل اگزه مرج میکنم و استفاده میکنم
ابتدا تابع زیر را تعریف کنید
Private Function ResolveAssemblies(ByVal sender As Object, ByVal e As System.ResolveEventArgs) As Reflection.Assembly
Dim desiredAssembly = New Reflection.AssemblyName(e.Name)
If desiredAssembly.Name = "test_dll" Then
Return Reflection.Assembly.Load(My.Resources.test_dll)
Else
Return Nothing
End If
End Function
سپس در رویداد لود برنامه فراخوانی بکنبد
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf ResolveAssemblies
موفق باشید
نقل قول: قرار دادن فونت در dll
سلام ممنون
کد مربوطه رو تبدیل کردم و کار کرد ولی کد مربوط به dll v رو چه چوری استفاده کنم؟
کد فونت:
if (myFonts == null)
{
myFonts = new PrivateFontCollection();
byte[] font = Properties.Resources.B_Nazanin;
fontBuffer = Marshal.AllocCoTaskMem(font.Length);
Marshal.Copy(font, 0, fontBuffer, font.Length);
myFonts.AddMemoryFont(fontBuffer, font.Length);
}
Label1.Font = new Font(myFonts.Families[0], 13, FontStyle.Regular);
اینم کد dll:
private System.Reflection.Assembly ResolveAssemblies(object sender, System.ResolveEventArgs e)
{
dynamic desiredAssembly = new System.Reflection.AssemblyName(e.Name);
if (desiredAssembly.Name == "test_dll")
{
return System.Reflection.Assembly.Load(Properties.Resourc es.Ionic_Zip);
}
else {return null; }
}
اینم در لود فرم:
AppDomain.CurrentDomain.AssemblyResolve += ResolveAssemblies;
نقل قول: قرار دادن فونت در dll
خیلی خوب تبدیل کردی احسنت اما ....
test_dll را با Ionic.Zip عوض کن
private System.Reflection.Assembly ResolveAssemblies(object sender, System.ResolveEventArgs e)
{
dynamic desiredAssembly = new System.Reflection.AssemblyName(e.Name);
if (desiredAssembly.Name == "Ionic.Zip")
{
return System.Reflection.Assembly.Load(Properties.Resourc es.Ionic_Zip);
}
else {return null; }
}
نقل قول: قرار دادن فونت در dll
ممنون
خوب چه جوری تو برنامه ازش استفاده کنم؟
من یه تابع دارم که فایل زیپ رو Extract میکنه:
using (var zip = Ionic.Zip.ZipFile.Read("file address"))
{
zip.Password = "123";
zip.ExtractAll("destination address");
}
نقل قول: قرار دادن فونت در dll
تو برنامه به کد بالا گیر مده
نقل قول: قرار دادن فونت در dll