Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Проблема с DLL!!!   Найти похожие ветки 

 
Schummi   (2004-05-02 13:30) [0]

Мастера, тут проблема с использованием DLL. Вот код, в чем ошибка?
код самой dll:
library mardis_slm;

uses
 classes,
 Sysutils;

type
PStringList=^TStringList;

procedure GetSR(ps:PStringList); StdCall;
begin
ps^.Clear;
end;

exports
 GetSR;

begin

end.


и код программы:

type
PStringList = ^TStringList;
TDllProc = procedure(Params:PStringList);

...

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
DllProc:TDllProc;
ws0:string;
DllHandle,i:integer;
ts:pstringlist;
begin
ws0:=ExtractFileDir(ParamStr(0))+"\mardis_slm.dll";
DllHandle:=LoadLibrary(PChar(ws0));
@DllProc:=GetProcAddress(DllHandle,"GetSR");
 if @DllProc<>nil then
  begin
   i:=-1;
   New(ts);
   ts^:=tstringlist.create;
   ts^.Clear;
   ts^.add("3");
   ts^.add("19");
   DllProc(ts);
   i:=ts^.Count;
   showmessage(InttoStr(i));
   dispose(ts);
  end;
end;


помогите, пожалуйста. Я сам уже все FAQ перерыл, хэлпы - ничего не нашел!!!


 
Cobalt ©   (2004-05-02 13:35) [1]

Мда, в чём проблема - так и неизвестно...


 
Schummi   (2004-05-02 15:20) [2]

Cobalt, у тебя тоже ошибка вылетает?


 
Palladin ©   (2004-05-02 15:43) [3]

утечка памяти это раз, указатель на указатель это два


 
TUser ©   (2004-05-02 15:45) [4]

Schummi, напиши, что за огшибка и где вылетает. И StdCall убери нафиг - без него никакого AV нету.


 
Anatoly Podgoretsky ©   (2004-05-02 15:50) [5]

А комментарий при создании ДЛЛ читал?


 
Palladin ©   (2004-05-02 15:53) [6]

:) и нечитал комментарий это три


 
Schummi   (2004-05-02 19:55) [7]

2Palladin где эта утечка и как её устранить? Что значит указатель не указатель?

2TUser вылетает где-то в модуле, а где, я не знаю

2Anatoly Podgoretsky хорошо, прочитаю

Но ,простите за наглость, что мне тогда в коде исправить?


 
Телипат проснулся на мгновение   (2004-05-02 20:58) [8]

Компилируй dll и exe с ран-тайм библиотеками.


 
Schummi   (2004-05-02 20:59) [9]

в комментарии написано только про тип string, а я же передаю в длл-ку указатель - тип pointer? какая моет быть утечка???


 
Cobalt ©   (2004-05-03 10:45) [10]

Дело не в утечке - ты передаешь ссылку на класс - а таблицы виртуальных методов (VMT) класса в двух прогах завсегда разный.

А так в этих самых ран-тайм библиотеках будет указан один и тот же адрес=>ссылка будет интерпретироваться как один и тот же класс, а не два разных (разные - в длл и ехе)


 
Palladin ©   (2004-05-03 13:29) [11]

утечка - ты не освобождаешь созданный TStringList
указатель на указатель - сам идентификатор объекта - уже указатель

это замечания, они к ошибке, про которую ты ничего не сказал, не относятся... TStringList передавать можно в принципе, но не нужно передавай TStringList.CommaText и в dll создавай объект TStringList и назначай CommaText переданное... не забудь указать ShareMem в файле проекта и файле dll... самым первым...


 
Schummi   (2004-05-03 16:48) [12]

простите за ламерство - ну не знаю я, а это как

> Компилируй dll и exe с ран-тайм библиотеками.
???


 
Schummi   (2004-05-03 16:49) [13]

а про CommaText надо попробовать!


 
Schummi   (2004-05-03 21:31) [14]

попробовал вариант с CommaText - на этом и остановился. Но тут все проходит без ошибок только если убрать stdcall! А, кстати, для чего нужен этот элемент?


 
Palladin ©   (2004-05-03 21:32) [15]

а кстати в справке хорошо написано


 
Черный прапорщик   (2004-05-03 21:34) [16]

procedure GetSR(ps:PStringList); export;


 
Palladin ©   (2004-05-03 21:37) [17]

это что за откровение? вам батенька тоже справку почитать надо


 
Palladin ©   (2004-05-03 21:38) [18]

Это что за откровение? Вам, батенька, тоже справку почитать надо.


 
Черный прапорщик   (2004-05-03 21:41) [19]

Может перегнул и скорей всего (не вниг, каюсь), но для статического вызова помоему именно так.


 
Palladin ©   (2004-05-03 21:44) [20]

far, near и export не имеют смысла в win32 и оставлены для обратной совместимости


 
Черный прапорщик   (2004-05-03 21:53) [21]

Поступаю проще (>far, near и export не имеют смысла в win32 и оставлены для обратной совместимости) - методом проб и ошибок, а не долгим вниканием в тексты хелпов, на предмет может - не может.
Как правило начальство не интесует свободное владение иностранных языков и время на изучение таковых, а интересует моментальная реализация их гениальных идей.
Вам всем хорошо... (Операция с новым годом)


 
Schummi   (2004-05-04 19:21) [22]

2Черный прапорщик  Знаешь, почитывать хелп иногда тоже полезно!!!


 
TUser ©   (2004-05-04 19:57) [23]

[4] - точно говорю, если поставить stdcall - вылетает AV. Если убить - не вылетает.


 
Schummi   (2004-05-06 07:58) [24]

TUser В этом ты прав! Я тоже с этим долго мучался! Но почему?


 
Digitman ©   (2004-05-06 09:07) [25]

кроме всех прочих серьезных ошибок ключевая ошибка - здесь, в строчке из текста ДЛЛ :

ps^.Clear;

связана она с тем , что в недрах метода происходит обращение к конкретному экземпляру менеджера памяти (и управляемым им структурам).. при этом обращение происходит попытка освобождения занятых элементами списка блоков пямяти, и если выделены эти блоки были иным экземпляром менеджера (например, экземпляром менеджера хост-процесса, вызывающего ДЛЛ), то вот здесь как раз и возникает критическая искл.ситуация

выходов не менее чем два (оба сводятся к использованию единого менеджера памяти)

1. Использовать ShareMem в USES вызывающего и вызываемого модулей (о чем и идет речь в комментарии в шаблоне текста нового ДЛЛ-проекта)

2. Осуществлять сборку обоих проектов (вызывающего и вызываемого) с опцией Build With Run-Time Packages = True



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.026 c
1-1083822876
Girder
2004-05-06 09:54
2004.05.23
Проблемма с отладчиком в Delphi 7


3-1082897710
td
2004-04-25 16:55
2004.05.23
Запрос с условием по мемо-полю


1-1083908296
Sla
2004-05-07 09:38
2004.05.23
Режим доступа к ТЕКСТОВОМУ файлу


1-1083806272
Funnymind
2004-05-06 05:17
2004.05.23
Удаление папки


14-1083712106
Soft
2004-05-05 03:08
2004.05.23
Нужна ли Украина России?