باسلام
البته شما در تالار سی شارپ این سوال را مطرح کردید و در این سیستم من فقط وی بی دات نت نصب است و دسترسی به 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
موفق باشید