Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 18:59   #1
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию Работа с dll

Доброго времени суток! Мне нужно в библиотеке (dll) сформировать TList который содержит TStringList, и полученный TList переслать в приложение и затем из TList данные перенести в TStringGrid. У меня ничего не получается, выдает такую ошибку
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EConvertError with message 'Cannot assign a TStringList to a TStringGridStrings'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
--------------------------
ничего не получается, кто с этим встречался подскажите в чем дело?
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 30.09.2009, 19:08   #2
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Прежде чем , создавать тему с поверхностным содержанием, как мы должны узнать ,в уме приставить как там функции и процедуры у вас описаны а?, наверное надо исходный текст тоже выкладывать !
uberchel вне форума Ответить с цитированием
Старый 30.09.2009, 19:22   #3
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Прежде чем , создавать тему с поверхностным содержанием, как мы должны узнать ,в уме приставить как там функции и процедуры у вас описаны а?, наверное надо исходный текст тоже выкладывать !
Прошу прощения, вот исходник - это просто проба, приложение гораздо сложнее, меня интересует - почему ошибка?
Вложения
Тип файла: zip Dll.zip (7.3 Кб, 14 просмотров)
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 30.09.2009, 21:59   #4
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Ну для начала, изменим концепцию и зачем передавать процедурой, как! ) надо функцией!

Код:
var
 templist: TstringList; //Глобально

function listik: TStringList;
var
  I: Integer;
begin
  templist:=tstringlist.Create;
  for I:= 1 to 5 do
  templist.Add(IntToStr(i));
  Result:= templist;
end;

//Освобождаем здесь:
begin
 templist.Free;
end.
и exe:
Код:
function listik: TStringList; external 'Project2.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
  strlist:tstringlist;
begin
  strlist:=tstringlist.Create;
  strlist.AddStrings(listik);
  StringGrid1.Rows[0]:= strlist;
  strlist.Free;
end;

Последний раз редактировалось uberchel; 30.09.2009 в 22:02.
uberchel вне форума Ответить с цитированием
Старый 30.09.2009, 22:58   #5
chingiz
Пользователь Подтвердите свой е-майл
 
Аватар для chingiz
 
Регистрация: 21.05.2007
Сообщений: 88
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Ну для начала, изменим концепцию и зачем передавать процедурой, как! ) надо функцией!

Код:
var
 templist: TstringList; //Глобально

function listik: TStringList;
var
  I: Integer;
begin
  templist:=tstringlist.Create;
  for I:= 1 to 5 do
  templist.Add(IntToStr(i));
  Result:= templist;
end;

//Освобождаем здесь:
begin
 templist.Free;
end.
и exe:
Код:
function listik: TStringList; external 'Project2.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
  strlist:tstringlist;
begin
  strlist:=tstringlist.Create;
  strlist.AddStrings(listik);
  StringGrid1.Rows[0]:= strlist;
  strlist.Free;
end;
ну в общемто процедурой или функцией я не вижу разницы.
а вобще из твоего кода я взял много полезного
свой код я изменил следующим образом, и все заработало

var
templist: tstringlist;
............
templist.AddStrings(strlist);
StringGrid1.Rows[0]:=templist;

большое спасибо - вопрос решен

но меня всетаки интересует, почему мой первоначальный код не работает из dll, но работал из любого другого модуля?
Уже Чему-то научился Но этого мало
chingiz вне форума Ответить с цитированием
Старый 01.10.2009, 08:14   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от chingiz Посмотреть сообщение
но меня всетаки интересует, почему мой первоначальный код не работает из dll, но работал из любого другого модуля?
Потому, что TStrings в приложении и в dll - это два разных класса, поэтому Assign приводит к исключению. (Assign вызывается при присваивании Rows := ...)
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с DLL soonner Помощь студентам 4 25.03.2009 21:32
Работа с dll Alex Logos Общие вопросы Delphi 3 27.02.2009 10:30
Работа с DLL Lazo Помощь студентам 4 21.02.2009 06:14
Работа с DLL StartMis Общие вопросы Delphi 4 09.02.2009 12:05
Работа с DLL Maks1978 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 18.09.2008 16:55