PDA

View Full Version : سوال: ارور در زمان اجرای دی ال ال در فایل اگزه



nsco_nsco
پنج شنبه 30 دی 1389, 22:14 عصر
سلام دوستان اروری در هنگام برنامه برام به وجود می اید

زمانی که فایل دی ال ال را که به شکل زیر است می خوانم در فایل اگزه این ارور پدید می اید ممنون می شوم کمکم کنید البته سریع :

فایل دی ال ا ل :


library Project1;



uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
StrUtils,
ExtCtrls,
ComCtrls,
TabNotBk,
HTTPApp,
ColorGrd,
DateUtils,
SimpleShareMem,
Math;

{$R *.res}
VAR
S1:STRING ;





function SayWelcome: string;

begin

S1:= formatdatetime('HH:MM:SS',time);
Result := S1;
end;

exports
SayWelcome;
begin
end.





فایل اگزه :



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,StrUtils, ExtCtrls, ComCtrls, ShellAnimations, TabNotBk,
HTTPApp, ColorGrd, Keyboard;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
TSayWelcome = function: string;
var
DLLInstance: THandle;
SayWelcome: TSayWelcome;
begin
DLLInstance := LoadLibrary('Project1.dll');
try
if DLLInstance = 0 then
begin
ShowMessage('Unable to load DLL');
exit;
end;
@SayWelcome := GetProcAddress(DLLInstance, 'SayWelcome');
if @SayWelcome <> nil then
ShowMessage(SayWelcome)
else
ShowMessage('Unable to locate function');
finally
FreeLibrary(DLLInstance);
end;

end;






end.




ممنون می شوم راهنماییم کنید با تشکر .:تشویق::لبخند::چشمک::قلب:

nsco_nsco
پنج شنبه 30 دی 1389, 22:18 عصر
باز سلام ارور ش این رو می گه :
THE MEMORY MANAGER CANNOT BE CHANGED AFTER IT HAS BEEN USED.
بعدش که میاره مسیج رو باز می نویسه :


ACCESS VIOLATION AT ADDRESS 004062C2 IN MODULE ' PROJECT2.EXE' READ OF ADDRESS 02B52B9C

ممنون :خجالت:

aisuda
جمعه 01 بهمن 1389, 00:34 صبح
سلام،
اگه فایل dll در فولدر برنامه باشه، مشکلی برای اجرا نباید داشته باشه. خطای ACCESS VIOLATION AT ADDRESS 004062C2 IN MODULE ' PROJECT2.EXE' READ OF ADDRESS 02B52B9C هم مربوط به آزاد کردن حافظه است، به نظر من می تونی دستور FreeLibrary(DLLInstance); را برداری.

nsco_nsco
جمعه 01 بهمن 1389, 01:01 صبح
سلام دوست من ممنون از جواب سریعتون

ممنون مشکلش حل شد اما همون بار اول که می زنی باز همون ارور برای اوین بار می یاد نمیشه کاری کرد این نیاد ممنون این اروره فقط یک بار میاد:
THE MEMORY MANAGER CANNOT BE CHANGED AFTER IT HAS BEEN USED.

vcldeveloper
جمعه 01 بهمن 1389, 01:03 صبح
SimpleShareMem باید اولین یونیت در لیست uses هر دو پروژه باشه. در کد DLL که یکی مانده به آخر هست. در سورس برنامه EXE هم که مشخص نیست کجا ست، چون باید در ابتدای لیست uses فایل DPR پروژه قرار بگیره، اما شما سورس فایل فرم را قرار دادید.

nsco_nsco
جمعه 01 بهمن 1389, 01:07 صبح
سلام دوستان ممنون از جواب سریعتون
در هر دو قرار دادم و این هم که گفتید در پروزه قرار داده بودم اما باز ارور می دهد میشود بگید چرا ؟

vcldeveloper
جمعه 01 بهمن 1389, 01:15 صبح
در هر دو قرار دادم و این هم که گفتید در پروزه قرار داده بودم اما باز ارور می دهد میشود بگید چرا ؟
دوست عزیز، در هر دو قرار بدید، مهم نیست، بلکه باید در ابتدای لیست قرار بدید؛ یعنی در اون سورس DLL تان، قبل از یونیت Windows باید SimpleShareMem بیاد. در فایل DPR مربوط به فایل EXE هم همینطور.