PDA

View Full Version : سوال: وارد کردن dll



sevenboys
شنبه 25 آذر 1391, 13:25 عصر
چگونه یک dll را که با c++ نوشته شده است در سی شارپ وارد کنم؟؟؟؟

مهرداد صفا
شنبه 25 آذر 1391, 13:56 عصر
سلام
اگر dll مورد نظر com باشد که میتوانید از طریق منوی project>add reference آن را به پروژه اضافه کنید در غیر این صورت باید توابع مورد نظر را تک تک شبیه به کد زیر تعریف کنید:

[System.Runtime.InteropServices.DllImport(@"c:\windows\system32\user32.dll")]
static extern void MessageBeep(int message);

ordebehesht
شنبه 25 آذر 1391, 14:31 عصر
سلام
اگر dll مورد نظر com باشد که میتوانید از طریق منوی project>add reference آن را به پروژه اضافه کنید در غیر این صورت باید توابع مورد نظر را تک تک شبیه به کد زیر تعریف کنید:

[System.Runtime.InteropServices.DllImport(@"c:\windows\system32\user32.dll")]
static extern void MessageBeep(int message);


در موردش بیشتر توضبح بده من زیاد این مورد دیدم مخصوصا خط اول

مهرداد صفا
شنبه 25 آذر 1391, 14:59 عصر
در موردش بیشتر توضبح بده من زیاد این مورد دیدم مخصوصا خط اول


این attribute (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.RUNTIME.INTEROPSERVICES.DLLIMPORTATTRIB UTE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true) به این معنیست که تابعی که تعریف شده یک تابع خارجی بوده که باید از کتابخانه ای که در متود سازنده attribute داده شده (در اینجا user32) فراخوانی شود.
زمانی کاربرد دارد که میخواهیم تابعی از یک unmanaged dll مثل توابع windows api را در برنامه .net استفاده کنیم.

morteza5358
شنبه 25 آذر 1391, 15:50 عصر
سلام
توي رفرنس هات اضافه كن.
...Refrences>>>Add Refrence

sevenboys
یک شنبه 26 آذر 1391, 16:44 عصر
در موردش بیشتر توضبح بده من زیاد این مورد دیدم مخصوصا خط اول
میشه بیشتر توضیح دهید؟؟این کد را کجا باید بنویسم؟چطوری بنویسم؟c++ خروجی com میده؟؟؟؟

sevenboys
دوشنبه 27 آذر 1391, 20:39 عصر
یکی کمکم کنه

مهرداد صفا
دوشنبه 27 آذر 1391, 23:09 عصر
میشه بیشتر توضیح دهید؟؟این کد را کجا باید بنویسم؟چطوری بنویسم؟c++ خروجی com میده؟؟؟؟


سلام
این یک نمونه استفاده فراخوانی توابع MessageBoxAو MessageBeep از User32.dll:

//in the name of god
//صل الله علی محمد و آله
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("user32")]
static extern void MessageBeep(uint m);
[System.Runtime.InteropServices.DllImport("user32")]
static extern int MessageBoxA(IntPtr handle, string text, string title, int type);
public Form1()
{
InitializeComponent();
MessageBoxA(IntPtr.Zero,"hello world","welcome!",0);
MessageBeep(64);
}
}
}


در مورد C++، خروجی com میدهد. باید دید استاندارد windows برای این model به چه صورت است.
اگر اطلاعات بیشتری در مورد نحوه خروجی com در C++ به دست آوردید دریغ نفرمایید.

saeedmassomi
چهارشنبه 28 مهر 1400, 21:08 عصر
با سلام
مشکلی داشتم چطور میتونم دوتا فایل dll با نام یکسان ولی با نسخه متفاوت رو در رفرنس ادد کنم مثلا دو تا dll مربوط به دو نسخه excel که که نامش یکسان هسنش به هنگام اضافه کردن پیغام خطای کانفلیگ موجود بودن فایل رو میده ...میشه یک نمونه سورس کامل رو قرار بدین ..

mehran6764
یک شنبه 02 آبان 1400, 19:05 عصر
با سلام
مشکلی داشتم چطور میتونم دوتا فایل dll با نام یکسان ولی با نسخه متفاوت رو در رفرنس ادد کنم مثلا دو تا dll مربوط به دو نسخه excel که که نامش یکسان هسنش به هنگام اضافه کردن پیغام خطای کانفلیگ موجود بودن فایل رو میده ...میشه یک نمونه سورس کامل رو قرار بدین ..

چرا دو تا dll ؟ نسخه پایین تر رو اد کنید به احتمال 99.9 درصد در نسخه های بالاتر هم جواب میده ..