سلام
فایل هدر برای تعریف توابع است نه برای export کردن توابع برایexport کردن یا باید توابع مربوطه رو در یکنقل قول:
ولی تو نوشتن فایل هدر که بتونه توابع رو export کنه، دچار مشکل شدم، یعنی یه فایل از نوع text به پروژه ی مربوط به برنامه dll (فایل myputs ) اضافه کردم و تابع myputs رو توش اعلان کردم و ...
بعد از این کار که برنامه ی dll رو اجرا کردم، 2 تا ارور لینک داد، خودم فکر می کنم فایل هدرش رو اشتباه نوشتم!
DEF. فایل قرار داد مثل نمونه هایی که قبلا خودتون گزاشته بودین یا اینکه قبل توابع مربوطه این دستور رو قرار داد
مثل نمونه dll که شما سورسش رو قرار دادین یعنی اینکد:__declspec(dllexport)
کد:__declspec(dllexport) int __cdecl myPuts(LPWSTR lpszMsg)
شما همین سورس dll ای که قرار دادین بدون هیچ فایل اضافه ای کامپایل کنید فایل dll و lib ساخته میشننقل قول:
اگه ممکنه کدهای مربوط به یه فایل هدر که بتونه این برنامه ها رو اجرا کنه، اینجا بذارید که بشه dll و lib رو ساخت و تو دو تا برنامه load-time و run-time ازش استفاده کرد!
و برای ساختن یه هدر فایل کافیه یه فایل h. بسازین و این دستور رو توش قرار بدین این برای load-time
و این برای run-time:کد:extern "C" int __cdecl myPuts(LPWSTR);
کد:typedef int (__cdecl *MYPROC)(LPWSTR);
بعد اجرا باید رشته ای که به عنوان پارامتر به تابع myPuts فرستاده شده در صفحه ی کنسول چاپ بشهنقل قول:
اگه موفق به اجرای برنامه ها شدین،لطفا بفرمایین خروجی برنامه چیه؟ (یعنی بعد از اجرا ، تو دو برنامه فراخوان در حالت load و run ،خروجی رو چی می بینیم؟)
در مورد این سورسی که گزاشتین دیگه نیازی به def. فایل نیست چون تو خود سورس dll تعریف شدننقل قول:
در ضمن با توجه به فرق بین فایل h. و def. ، باید کدوم یکی رو تولید کنیم؟
ولی میتونید فایل h. رو ایجاد کنید (البته اینم تو خوده برنامه ها تعریف شدن مگر اینکه بخواین از سورس برنامه جداش کنید)
این مورد رو بهتره در msdn پیدا کنیدشاید مجبور باشید این کارا رو بصورت جدا انجام بدین چون خودم کار نکردم نظری ندارمنقل قول:
یه سوال دیگه:
اگه من بخوام یه سری توابع به اون نمونه کد قالب csp اضافه کنم،(مثلا یه الگوریتم hash یا یه الگوریتم cryptography (رمزنگاری) به اون قالب های تابع cryptoAPI ای که در کد CSP موجوده (همون 23 تا تابع) اضافه کنم،آیا باید هدر فایل و فایل def اش رو هم تغییر بدم؟
قواعد خاصی نداره همون قواعدی هست که برای تعریف یک تابع استفاده مکینیم فقط همین تعاریفنقل قول:
اصلا قواعد و دستورات نوشتن یه هدر فایل برای فایل های dll چه جوریه(در این مورد اگه لینکی که هم دستورات رو توضیح داده باشه و هم چند نمونه مثال داشته باشه،معرفی کنین ممنون میشم)
رو تو یه فایل h. به صورت جداگانه قرار میدیم
همونطور که گفتم مثلا در نمونه سورسی که شما گزاشتین دیگه هدر فایلی نیست و تابع داخل خود سورس برنامه تعریف شده (منظورم همون سورس load-time و run-time هست)
شما همینو میتونین جداش کنید
اینجور که از پیام معلومه فایل csp.dll رو پیدا نکرده فایل هر جایی میتونه باشه بهتره مسیر کامل فایل رو بدین،نقل قول:
- در مورد این دستور:
که برای مشاهده ی فایل های Export شده بود، من اینو تو محیط command کپی کردم و نتیجه اش این شد:کد:dumpbin /EXPORTS csp.dll
در ضمن برنامه ویژوال استودیوی من (برنامه Dumpbin.exe ) دردرایو C و ویندوز (یعنی در واقع Cmd.exe ) در درایو D قرار داره ،امکان نداره به خاطر متفاوت بودن درایوها این ارور رو بده یا اینکه اصلا فایل csp.dll باید کجا قرار داشته باشه؟
بعد اجرای دستور باید همچین خروجی از csp.dll بگیرین
کد:Microsoft (R) COFF Binary File Dumper Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Dump of file csp.dll
File Type: DLL
Section contains the following exports for CSP.dll
0 characteristics
3B1D0B77 time date stamp Tue Jun 05 21:10:23 2001
0.00 version
1 ordinal base
25 number of functions
25 number of names
ordinal hint RVA name
1 0 00001470 CPAcquireContext
2 1 000014B0 CPCreateHash
3 2 00001520 CPDecrypt
4 3 000014B0 CPDeriveKey
5 4 00001590 CPDestroyHash
6 5 00001590 CPDestroyKey
7 6 00001560 CPEncrypt
8 7 00001520 CPExportKey
9 8 00001490 CPGenKey
10 9 000015B0 CPGenRandom
11 A 000014D0 CPGetHashParam
12 B 000014D0 CPGetKeyParam
13 C 00001500 CPGetProvParam
14 D 000015C0 CPGetUserKey
15 E 00001580 CPHashData
16 F 000014F0 CPHashSessionKey
17 10 00001540 CPImportKey
18 11 00001590 CPReleaseContext
19 12 00001580 CPSetHashParam
20 13 00001580 CPSetKeyParam
21 14 000014F0 CPSetProvParam
22 15 00001520 CPSignHash
23 16 000015A0 CPVerifySignature
24 17 00001060 DllRegisterServer
25 18 00001000 DllUnregisterServer
Summary
1000 .data
1000 .rdata
1000 .reloc
1000 .rsrc
1000 .text
نقل قول:
این پروژه با Visual Studio 2005 ایجاد شده اگه با این ورژن یا بالا تر کامپایل کنین دیگه این مشکلو ندارین من با 2008 انجام دادم و درست کامپایل شد
شاد باشید