Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизDll и TThread Найти похожие ветки
← →
Reindeer Moss Eater © (2004-10-29 11:11) [40]почему тогда это код в апликухе работает?
Потому что там работает другой код
← →
dms_main © (2004-10-29 11:11) [41]
> это даже скомпилировано быть не может
делфа у меня (5 и 7) кривые - компилят кривой код.... :-)))
← →
dms_main © (2004-10-29 11:12) [42]
> Потому что там работает другой код
как это понимать?
← →
Reindeer Moss Eater © (2004-10-29 11:15) [43]Слева направо
← →
dms_main © (2004-10-29 11:17) [44]Воощем тут все ясно ......
все ушли от темы - помочь в итоге никто не в состоянии .....
← →
Reindeer Moss Eater © (2004-10-29 11:18) [45]Иногда и медицина бессильна
← →
Digitman © (2004-10-29 11:20) [46]
> делфа у меня (5 и 7) кривые - компилят кривой код
дурью маешься, да ?
при чем здесь версия Делфи ? ты прявила Паскаля нарушил !
procedure TMythread.execute;
begin
assignfile(list,drive+".txt");
rewrite(list);
FindFile(drive+":\round.txt");
closefile(list);
checkList:=TStringList.Create;
checklist.Duplicates:=dupIgnore;
checklist.Sorted:=true;
checkList.LoadFromFile(drive+".txt");
checklist.SaveToFile(drive+".txt");
checklist.Clear;
parseFile(drive+".txt");
end;
mycountsection:=TcriticalSection.Create;
mycountsection.Enter;
try
threadcount:=threadcount-1;
finally
mycountsection.Leave;
mycountsection.Free;
end;
end;
то что подчеркнуто, это к чему относится ?
тело процедуры Execute - это то что между begin..end у тебя, а следом что за галиматься идет, скажи на милость ?
← →
sniknik © (2004-10-29 11:21) [47]> как это понимать?
ты не то показываеш, хочеш чтобы по 18й строке нашли глюк в 17й. а то что показываеш нельзя назвать кодом, это один сплошной глюк, не скомпилится.
либо здесь урезано так что принимает другой вид.
← →
sniknik © (2004-10-29 11:23) [48]> Иногда и медицина бессильна
ага, и тогда больной выживает. ;о)) (в смысле глюк, в этом случае)
← →
dms_main © (2004-10-29 14:44) [49]Хорошо - мы пойдем другим путем - если руки у меня кривые, то подскажите где именно:
library finer_lib;
uses
SysUtils,windows,
Classes;
type TMyThread = class (TThread)
a:integer;
b:integer;
c:integer;
constructor create(a0,b0:integer);
destructor free;
procedure execute;override;
end;
constructor TMyThread.create(a0,b0:integer);
begin
inherited create(false);
a:=a0;
b:=b0;
FreeOnTerminate:=true;
end;
destructor TMyThread.free;
begin
inherited free;
end;
procedure TMyThread.execute;
var
t:TstringList;
begin
c:=a*b;
t:=TStringList.Create;
t.Add("Result = "+inttostr(c));
t.SaveToFile("c:\result.nfo");
t.Free;
end;
{$R *.RES}
var
thread:TMyThread;
begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end.
Execute попрежнему не вызывается.....
← →
dms_main © (2004-10-29 14:46) [50]загрузка dll-ки :
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
windows;
begin
readln;
LoadLibrary("finer_lib.dll");
readln;
end.
← →
Reindeer Moss Eater © (2004-10-29 14:48) [51]Зашибись!
А где запуск чего либо из DLL?
← →
Reindeer Moss Eater © (2004-10-29 14:50) [52]Reindeer Moss Eater © (29.10.04 10:14) [4]
Или вообще не создан экземпляр
← →
dms_main © (2004-10-29 14:51) [53]а зачем после загрузки сразу выполняется begin...end.
begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end.
Можешь проверить.....
← →
dms_main © (2004-10-29 14:52) [54]
> Reindeer Moss Eater © (29.10.04 10:14) [4]
> Или вообще не создан экземпляр
создается - проверено дэбагом....
← →
Reindeer Moss Eater © (2004-10-29 14:52) [55]Можешь проверить.....
Для начала надо проверить результат LoadLibrary
← →
dms_main © (2004-10-29 14:54) [56]возвращает хэндл....
← →
Reindeer Moss Eater © (2004-10-29 14:59) [57]Код между бегин енд выполнятеся при загрузке процессом.
А выполняется ли он если библиотека грузится вторичным потоком этого процесса?
← →
dms_main © (2004-10-29 15:02) [58]Судя по тому что здесь>
inherited create(false);
a:=a0;
b:=b0;
FreeOnTerminate:=true;
брэкпоинты - и на них выполнение останавливается, то грузит...
← →
Reindeer Moss Eater © (2004-10-29 15:05) [59]Поток грузит библиотеку. И Хендл валидный.
Но это вторичный поток и я не уверен, что в этом случае выполняется код между бегин и енд.
Надо поднимать литературу.
← →
dms_main © (2004-10-29 15:07) [60]так бы и сразу - а то "руки кривые","медицина бессильна".... :-(
подскажите хоть в каком направлении копать.
← →
Reindeer Moss Eater © (2004-10-29 15:09) [61]Экспортируй функцию из DLL и вызывай её явно, а не полагайся на Windows
← →
dms_main © (2004-10-29 15:11) [62]щас попробую..
← →
Digitman © (2004-10-29 15:17) [63]
> dms_main
цитирую тебя :
constructor TMyThread.create(a0,b0:integer);
begin
inherited create(false);
a:=a0;
b:=b0;
FreeOnTerminate:=true;
end;
какого шута ты делаешь
inherited create(false);
!?
ведь доп.поток при этом начинает работать практически немедленно !
на основании чего ты уверен, что строка в конструкторе
a:=a0;
выполнится заведомо раньше, чем строка
c:=a*b;
в теле Execute ?
мозжечком-то пошевели малясь !
← →
Reindeer Moss Eater © (2004-10-29 15:20) [64]Все проще оказалось.
Код между бегин-енд в модуле библиотеки вызывается один раз на весь процесс.
← →
dms_main © (2004-10-29 15:23) [65]
> на основании чего ты уверен, что строка в конструкторе
на основании того что execute вызывается ПОСЛЕ create
кстати от темы опять уходим.....
> Все проще оказалось.
>
> Код между бегин-енд в модуле библиотеки вызывается один
> раз на весь процесс.
и что из этого следует???
← →
Reindeer Moss Eater © (2004-10-29 15:25) [66]и что из этого следует???
То, что кто-то до сих пор с ручника не снялся.
← →
dms_main © (2004-10-29 15:26) [67]
library finer_lib;
uses
SysUtils,windows,
Classes;
type TMyThread = class (TThread)
a:integer;
b:integer;
c:integer;
constructor create(a0,b0:integer);
destructor free;
procedure execute;override;
end;
constructor TMyThread.create(a0,b0:integer);
begin
inherited create(false);
a:=a0;
b:=b0;
FreeOnTerminate:=true;
end;
destructor TMyThread.free;
begin
inherited free;
end;
procedure TMyThread.execute;
var
t:TstringList;
begin
c:=a*b;
t:=TStringList.Create;
t.Add("Result = "+inttostr(c));
t.SaveToFile("c:\result.nfo");
t.Free;
end;
{$R *.RES}
procedure run;stdcall;export;
var
thread:TMyThread;
begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end;
exports run;
begin
end.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
windows;
var
run : procedure;
handle:THandle;
begin
readln;
@run:=nil;
handle:=LoadLibrary("finer_lib.dll");
if handle>= 32 then
begin
@run:=GetProcAddress(Handle,"run");
if @run <> nil then
run; ;
end;
FreeLibrary(Handle);
writeln("ok");
readln;
readln;
end.
Всем спасибо - все заработало, но всетаки интересен вопрос
- реально ли запустить этот трэд в begin..end библиотеки???
← →
dms_main © (2004-10-29 15:27) [68]
> Reindeer Moss Eater © (29.10.04 15:25) [66]
> и что из этого следует???
>
> То, что кто-то до сих пор с ручника не снялся.
весь день на нервах , так что уж извиняйте.... :-)
← →
Reindeer Moss Eater © (2004-10-29 15:28) [69]Реально.
Один раз за все время существования процесса.
← →
Digitman © (2004-10-29 15:31) [70]
> все заработало
да не будет это работать как положено !
см. [63]
> реально ли запустить этот трэд в begin..end библиотеки
запустить любой код реально !
только вот будет ли он (конкретный твой код) делать то, что от него ожидается - это еще бабушка надвое сказала ...
← →
dms_main © (2004-10-29 15:32) [71]
> То, что кто-то до сих пор с ручника не снялся.
- это точно......
Может объясните????
мне собственно и надо 1 раз , а не 2 и не 10.....
как заставить это работать без экспорта?
← →
dms_main © (2004-10-29 15:33) [72]
> да не будет это работать как положено !
> см. [63]
с экспортом уже работает...
← →
Reindeer Moss Eater © (2004-10-29 15:34) [73]как заставить это работать без экспорта?
Чё, пошлины экспортные давят?
← →
dms_main © (2004-10-29 15:35) [74]
> Чё, пошлины экспортные давят?
ага причем сильно..... :-))
← →
Reindeer Moss Eater © (2004-10-29 15:37) [75]Все это напоминает ток-шоу с приглашенными актерами.
Но актеры эти приглашенные, надо отдать должное здешним спецам по кастингу, иногда просто гениальные попадаются.
Именно гениальные. Снимаю шляпу.
← →
dms_main © (2004-10-29 15:39) [76]А если серьезно?
← →
Reindeer Moss Eater © (2004-10-29 15:39) [77]Так ведь работает уже
← →
Digitman © (2004-10-29 15:40) [78]просто вызови конструктор трэда в теле begin..end библиотеки.
что этому мешает ?
← →
dms_main © (2004-10-29 15:41) [79]
> Так ведь работает уже
с экспортом - да ,а без экспорта - нет.
Я и спросил можно ли без экспорта и если да - то как.
← →
dms_main © (2004-10-29 15:42) [80]
> просто вызови конструктор трэда в теле begin..end библиотеки.
> что этому мешает ?
А я что сделал?
begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end.
Страницы: 1 2 3 4 5 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.04 c