PDA

View Full Version : اشکال در رابطه با export کردن توابع



یوسف زالی
دوشنبه 12 اردیبهشت 1390, 15:00 عصر
با سلام.
من یه exe دارم که یه یونیت داره و اون یونیت به روال که فقط توش MessageBox هست رو export می کنه.
وقتی که تون تابع رو از یه برنامه خارجی صدا می زنم access vaiolation میده:

unit Unit2;
interface
uses Windows;
procedure Proc1;
implementation
procedure Proc1;
begin
MessageBox(0, 'Test', '', 0)
end;
exports
Proc1;
end.


تو برنامه فراخواننده:

procedure Proc1; external 'SomeWhere';

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

begin
Proc1;
end;

ACCESS VIOLATION میده.

از دوستان لطفا اگه کسی می دونه کمکم کنه.

nilidelphi
دوشنبه 12 اردیبهشت 1390, 20:49 عصر
دوست عزیز وقتی سوالی دارین که مربوط به کد زبان میشه لطفا کد رو داخل تگ کد قرار بدین تا خواناتر باشد.



unit Unit2;
interface
uses Windows;
procedure Proc1;
implementation
procedure Proc1;
begin
MessageBox(0, 'Test', '', 0)
end;
exports
Proc1;
end.


تو برنامه فراخواننده:


procedure Proc1; external 'SomeWhere';

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

begin
Proc1;
end;

ACCESS VIOLATION میده.

در ضمن تا اونجا که من اطلاع دارم یک متد رو از یک DLL میشه اکسپورت کرد نه یک EXE
تازه باید مبدا متد چه دینامیک و چه استاتیک اول لود بشه.

یوسف زالی
سه شنبه 13 اردیبهشت 1390, 09:29 صبح
دوست عزیز وقتی سوالی دارین که مربوط به کد زبان میشه لطفا کد رو داخل تگ کد قرار بدین تا خواناتر باشد.



unit Unit2;
interface
uses Windows;
procedure Proc1;
implementation
procedure Proc1;
begin
MessageBox(0, 'Test', '', 0)
end;
exports
Proc1;
end.


تو برنامه فراخواننده:


procedure Proc1; external 'SomeWhere';

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);

begin
Proc1;
end;

ACCESS VIOLATION میده.

در ضمن تا اونجا که من اطلاع دارم یک متد رو از یک DLL میشه اکسپورت کرد نه یک EXE
تازه باید مبدا متد چه دینامیک و چه استاتیک اول لود بشه.


بله اما تو دلفی به دو روش لود انجام میشه که یکیش همین طوریه که گذاشتم.
اصولا از هر نوع برنامه احرایی ای می شه export گرفت. این کد وقتی تابعی مثل فاکتوریل export میکنه مشکلی نداره.
گیرم اونجاست که messagebox رو access violation میده.

از دوستان درخواست کمک دارم.

یوسف زالی
سه شنبه 13 اردیبهشت 1390, 09:35 صبح
یعنی کسی نبود به داد ما برسه؟!!:ناراحت:
دوستان کم لطفی نکنین .
من دلفیم خوبه ولی گبر افتادم.
از مدیران محترم کسی نیست جواب مارو بده؟

یوسف زالی
سه شنبه 13 اردیبهشت 1390, 12:53 عصر
یعنی کسی بلد نیست؟
آقای کشاورز اگه ممکنه یه نگاهی بندازید.
ممنون

SAASTN
سه شنبه 13 اردیبهشت 1390, 13:36 عصر
لابد کسی بلد نیست دیگه، این جور چیزا بیشتر تجربیه، منم قبلا برخورد نکرده بودم، الان تست کردم و به نتیجه نرسیدم. البته بگم من با رفتار دیگه ای مواجه شدم، توی سیستم من خطایی نمیده ولی پنجره رو هم نمایش نمیده، با دیباگ هم که میرم بهش میرسه و خیلی شیک از روش رد میشه، تازه خروجیش هم IDOK هست!
حالا اگه بجای MessageBox از ShowMessage استفاده کنیم (اونم تو هر کدوم از Exe ها) دیگه برنامه اصلا لود نمیشه.
حالا یه چیز باحال تر برا خنده، من اومدم توی Proc1 عرض Form1 رو تغییر دادم، بعد از فراخوانی عرض Form2 توی Exe فراخواننده تغییر می کنه!!

یوسف زالی
سه شنبه 13 اردیبهشت 1390, 13:52 عصر
آره منم دیده بودم!
بازم ممنون از بررسیت.

یوسف زالی
چهارشنبه 14 اردیبهشت 1390, 21:21 عصر
از آقایان مدیر درخ.است کمک دارم.
لطفا همکاری کنید.
ممنون

یوسف زالی
دوشنبه 19 اردیبهشت 1390, 11:26 صبح
آقایان مدیران برنامه نویس لااقل توقع دارم بگین بررسی کردین.
من با این مشکل چه کنم؟

یوسف زالی
چهارشنبه 21 اردیبهشت 1390, 09:05 صبح
با تشکر فراوان از پیگیری های آقایان مدیر..!
لااقل نکردین بگین نگاهی انداختین یا نه.
فقط با جواب به سوالای راحت آمارتونو بالا نبرید.

developing
چهارشنبه 21 اردیبهشت 1390, 10:50 صبح
با سلام

قبلا من هم همین مشکل رو داشتم اما
وقتی که یک رشته رو توی DLL استفاده کنی باید اون رشته مختوم به تهی (PChar) باشه.
حالا شما هم یه امتحان بکن شاید مشکلت رفع بشه:
رشته های پاسکالیت رو به PChar یا PWideChar تبدیل کن.
امیدوارم مشکلت حل بشه.

یوسف زالی
چهارشنبه 21 اردیبهشت 1390, 15:35 عصر
راستش تو dll مشکلی ندارم. تو exe فقط این طوری میشه.
اما دم تو گرم که دیدی. تازه مدیر هم نیستی!!
:بامزه:

یوسف زالی
شنبه 24 اردیبهشت 1390, 09:57 صبح
عاشق مدیریت اینجام من

SAASTN
شنبه 24 اردیبهشت 1390, 19:50 عصر
عاشق مدیریت اینجام من
قبلا هم خدمتتون عرض کردم اگر کسی جوابی برای مشکل شما داشت خوب میومد می گفت. این که می گید لااقل بگید که بررسی کردید هم به نظر من چیز درستی نیست، این جا قراره هر پستی حاوی محتوا باشه. یکی بیاد یه مسئله ای رو مطرح کنه بعد پشت سرش 40 نفر بیان بگن "من بلد نیستم"، "منم نمی دونم چجوری حل میشه"، "منم ور رفتم نشد" و ... اینجوریم که نمیشه که. اون پست قبلی هم که من دادم راستش اول فقط می خواستم همون جمله اول رو بذارم بعد دیدم خوب نیست یکم بیشتر چرت و پرت گفتم. بعد مدیرای سایتم کارشون مدیریت سایته، وظیفه ندارن که حتما بیان سوالات تک تک کاربرا رو بررسی کنن. از طرفی من مطمئنم مدیرای این بخش سوال شما رو دیدن، دیگه بعد از چندین بار بالا اوردن تاپیک حتما دیدن. آخه کاری هم که می خواید انجام بدید نمی دونم تا چه حد اصولیه، قبول کنید امر رایجی نیست.

یوسف زالی
یک شنبه 25 اردیبهشت 1390, 08:07 صبح
دوست عزیز حق با شماست.
هم کارش نامتعارفه هم من به شما حق می دم.
اما بد جور لازم دارمش.
به هر حال ممنون.