PDA

مشاهده نسخه کامل : ساخت DLL



hero4000
13-04-10, 11:59
سلام بر همه دوستان

من برنامه نويس Vb هستم حالا توي برنامم ميخوام از يک دي ال ال استفاده کنم که تحت VC++‎ يا C#‎ نوشته بشه

ولي اصلا اينها رو بلد نيستم

اگه دوستان زحمت بکشن راهنمائي کنن ممنون ميشم

ساختار تابع به صورت زير است


Private Declare Function Str Lib "Str.dll" (ByVal n As Integer, ByVal lpBuffer As String) As Long

راستي متغير lpBuffer باز گشتي (يعني مقداري که توي فايل دي ال ال رو ميگيره بايد حفظ کنه )


از همه شما کمال تشکر را دارم

MoBiN.R
14-04-10, 20:44
دوست عزیز ورود شمارو در انجمن خودتون خوش آمد میگم .. DLL به هر زبانی باشه در هر زبان دیگری میشه ازش استفاده کرد مگر رجیستر نشده باشند ، مشکل برنامه نویسی داشته باشن و ... . برای استفاده از DLL هم میتونید از API استفاده کنید و هم از منوی Project Explorer کلیک راست کنید و گزینه Add Refrence رو انتخاب کنید و یا منوی Project

hero4000
15-04-10, 08:32
دوست عزیز ورود شمارو در انجمن خودتون خوش آمد میگم .. DLL به هر زبانی باشه در هر زبان دیگری میشه ازش استفاده کرد مگر رجیستر نشده باشند ، مشکل برنامه نویسی داشته باشن و ... . برای استفاده از DLL هم میتونید از API استفاده کنید و هم از منوی Project Explorer کلیک راست کنید و گزینه Add Refrence رو انتخاب کنید و یا منوی Project

دوست عزيز من فکر ميکنم يا اطلاعات شما ناقصه يا من چيزي از برنامه نويسي نمي فهمم :1. (27):

يعني اگه من يک دي ال ال به زبان وي بي بنويسم شما ميتونين توي سي ازش استفاده کنين !!!!!

ولي در مجموع شما سوال من رو متوجه نشدين لطفا مجدد سوالم رو بخونين

نکته : سوال من چه ربطي به API داشت

MoBiN.R
16-04-10, 21:23
دوست عزیز خود ویژوال بیسیک از DLL هایی استفاده میکنه که به زبان های دیگری جز خودش نوشته شده اند .. مثلا از بعضی از DLL های ویندوز استفاده میکنه که به زبان C نوشته شده اند مثل user32 ، Kernel32 و ... .

این اعلان شما : Private Declare Function Str Lib "Str.dll" (ByVal n As Integer, ByVal lpBuffer As String) As Long دقیقا دستور API هست و از DLL خارجی استفاده میکنه .. محدود به زبان هم نیست

hero4000
17-04-10, 08:04
دوست عزيز اين را که خودم گفته بودم

منظور من ساخت دي ال ال در وي بي و استفاده اون در سي بودش
يعني اگه من يک دي ال ال به زبان وي بي بنويسم شما ميتونين توي سي ازش استفاده کنين !!!!!

حالا سوالم رو دوباره مطرح ميکنم شايد من درست نگفتم

من ميخوام يک دي ال ال در سي درست کنم که وقتي اون رو در وي بي استفاده ميکنم پارامتر دومش هر مقداري رو که در دي ال ال گرفت به پارامتر ارسالي من در برنامه وي بي منتقل بشه

خودم يکي دي ال ال درست کرده ام ولي پارامتر دومش مقدار درستي نميگيره

حالا نميدونم نوع متغير رو توي سي درست تعريف نکردم يا مشکل از جاي ديگري است

ravegoat
17-04-10, 13:52
با سلام!

دوست عزیز؛ من هم عضویت شما رو در PCN تبریک می گم!

متاسفانه من اصلا" متوجه نمی شم که درخواست شما چیه...؟!

خیلی چیزها برام گنگ مثل پارامتر ارسالی در VB، مقدار گیری ، نحوه ی ارسال داده و ....

لطفا" بیش تر توضیح بدید.

با سپاس
آرمین

hero4000
17-04-10, 14:45
ببينيد دوست من من ميخوام يک فايل دي ال ال توسط ويژوال سي ++ بسازم که توش يک تابع داشته باشه که اين تابع دوتا پارامتر داره

پارامتر اول که هيچي ولي پارامتر دوم رو ميخوام هر مقداري توي دي ال ال گرفت به برنامم منتقل بشه

مثال :


Private Declare Function Str Lib "Str.dll" (ByVal n As Integer, ByVal lpBuffer As String) As Long

""=Dim ss as string
Dim l As long=0
Dim i as integer=5
l=str(i,ss)


خوب حالا فرض کنيد متغير lpBuffer ما که توسط وي بي تهي در نظر گرفته شده مياد توي دي ال ال تبديل ميشه به عبارت "Salam" خوب من فقط ميخوام مقدار SS هم که توي برنامه من هستش بعد از اجراي تابع بشه "Salam" همين!!!

شما زحمت بکشين بگين اين دي ال ال رو چجوري بسازم

با تشکر

ravegoat
20-04-10, 15:56
دوست عزیز!

شما باید DLL رو طوری تعریف کنید که مقدار ' Salam ' رو یه جوری برگردونه. اون جوری که شما Dll رو وارد برنامه کردید، امکان نداره که بشه این کار رو کرد. چون فقط یه مقدار Long رو می گیره.

من می تونم کد VB.net این Dll رو بنویسم:



Shared Funcion Str(ByVal n As Integer, ByVal lbBuffer As String) As String
Str= "Salam"
End Function

می تونید از اینجا (Only the registered members can see the link)سورس رو به C++ تبدیل کنید.

در ضمن تابع رو این جوری تعریف کنید:


Private Declare Function Str Lib "Str.dll" (ByVal n As Integer, ByVal lpBuffer As String) As String

ُss = str(i,ss)امیدوارم که منظورتون رو درست متوجه شده باشم.

اگه غیر از این بود, بگید تا دوستان و بنده راهنماییتون کنیم.

موفق باشید
آرمین:Love-PCN~!:

hero4000
21-04-10, 08:48
دوست عزيز از شما متشکرم ولي من برنامم تحت دات نت نيست اون کانورتور هم خيلي بد تبديل کرد

ravegoat
22-04-10, 17:28
دوست عزيز از شما متشکرم ولي من برنامم تحت دات نت نيست اون کانورتور هم خيلي بد تبديل کرد
بله متوجه شدم...درسته اون تبدیل کننده زیاد کارآمد نیست.

کلا" سورسی که می خواهید زیاد مشکل نیست. سعی می کنم با کمک دوستام کد VCpp رو براتون تهیه کنم!

hero4000
01-05-10, 08:08
دوست عزيز الوعده وفا:yes:

ravegoat
05-05-10, 19:59
با سلام!
بابت تاخير عذر مي خوام.

اين هم سورسي كه مي خواستيد:




CString Str(int n, CString lbBuffer)
{
lbBuffer = 'Salam';
return(lbBuffer);
}



براي استفاده از اين كد يه Class Library بايد ايجاد كنيد و بايد كلاس CString به علاوه ي windows.h رو براي پروژه تعريف كنيد. در نهايت تابع Str را در بخش EXPORT قرار بديد و DLL رو كامپايل كنيد.

وقتي DLL رو ساختيد، مي تونيد اون رو وارد هر برنامه بكنيد. توجه كنيد كه Str مقدار Salam رو بر مي گردونه.

موفق باشيد
آرمين:11():