PDA

View Full Version : فراخوانی ایستای DLL ها



Mahdi_Delphi
شنبه 06 آبان 1385, 19:50 عصر
سلام

برای فراخوانی استاتیک توابع از یک فایل DLL پنــج نوع روش فراخوانی وجود داره که عبارتند از:

Register
Pascal
StdCall
SafeCall
CDecl

اگر هم نوع فراخوانی رو مشخص نکنیم به طور پیش فرض Register در نظر گرفته میشه.

در Register و Pascal تبادل اطلاعات از چپ به راست میباشد ولی در بقیه از راست به چپ.

در فراخوانی Register از ثبات ها (Register ها) ی CPU برای انتقال اطلاعات استفاده میشه ولی در بقیه از پشته برای این کار استفاده میشه.

مشکل من اینه که یک تابع برای محاسبه توان توی یک DLL گزاشتم ولی فقط با فراخوانی نوع Register جواب میده و با استفاده از بقیه روش ها یا خطا رخ میده یا جواب درست نمایش داده نمیشه.

به نظر شما مشکل از کجاست؟

ممنون

oVERfLOW
شنبه 13 آبان 1385, 11:33 صبح
بستگی داره تابع توی dll از چه نوعی باشه
هر نوعی که اون باشه توی برنامه هم همون‌جوری باید صدا بشه...

Mahdi_Delphi
شنبه 13 آبان 1385, 12:04 عصر
بستگی داره تابع توی dll از چه نوعی باشه
هر نوعی که اون باشه توی برنامه هم همون‌جوری باید صدا بشه...

خیلی ممنون

پس موقع نوشتن DLL باید نوع فراخوانی مشخص بشه وچون من ننوشتم به صورت Register در نظر گرفته شده و حالا فقط با Register جواب میده.

Mahdi_Delphi
سه شنبه 23 آبان 1385, 18:26 عصر
یک تابع داخل یک DLL نوشتم که دو رشته رو میگیره و پس از انجام پردازش هایی یک رشته برمیگردونه. ولی موقع فراخوانی (بعد از فراخوانی و نمایش نتیجه) تابع برنامه خطا میده!

Invalid pointer operation

فقط هم با توابعی که رشته برمیگردونن این مشکل رو دارم.

آیا فراخوانی این توابع شکل به خصوصی داره ؟

ممنون

Inprise
سه شنبه 23 آبان 1385, 22:25 عصر
http://www.codexterity.com/memmgr.htm

Mahdi_Delphi
چهارشنبه 24 آبان 1385, 11:58 صبح
موفق نشدم !

باز هم خطا میده.خطای Access violent !

میشه یک مثال بزارین.

ممنون

vcldeveloper
پنج شنبه 25 آبان 1385, 10:15 صبح
موفق نشدم !

باز هم خطا میده.خطای Access violent !

میشه یک مثال بزارین.
بهتره کد تابع در DLL و نحوه فراخوانی آن در برنامه اتون رو اینجا بزارید.