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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2009, 08:59   #21
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
неужели нельзя авторам всяких руководств и справочников создавать примеры для людей а не для профессиональных программистов?
Не обижайся на них (нас). Со временем меняется мировоззрение и восприятие, соответственно и лексикон более сдвигается в дебри бездны области, в которой авторы крутятся, это природно.

P.S. Если тебя это подбодрит, то я тоже мало что понял. Попытался в Си++ просто поюзать ИНИ файлы, но не нашел хеадер, который содержит TIniFile.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2009, 09:45   #22
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

Вот это я понимаю, человек честно сказал
Странно одно: в принципе если длл-ка прекрасно пишет ини-файл, то какого овоща нельзя точно так же и читать его, причем без всяких заморочек и точно таким же образом? Ведь теоритически если ini:=ini.create(opendialog1.filenam e) и есть "обозначение" того что "тот файл,который будет инициализирован с помощью диалога выбора файла", то какого овоща при записи его это работает а при чтении нет? я уже опасаюсь экспериментировать. может тут assign(ini) не хватает? Предполагаю что это как раз частный случай именно с чтением файла именно с помощью длл. Т.к. в примерах по длл все работает корректно и все функции вызываются прекрасно.
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".
bush007 вне форума Ответить с цитированием
Старый 03.09.2009, 10:01   #23
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Т.к. в примерах по длл все работает корректно и все функции вызываются прекрасно.
Что мешает написать процедуру чтения Корректно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2009, 10:54   #24
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

Не, ты издеваешься? Мешает то, что я не знаю как это сделать! Иначе зачем я спрашиваю, для прикола что ли? Примеры по созданию и использованию длл все про небольшие функции и вызов их не составляет труда. Знаешь как, дык подскажи, примерчиком. или хотя бы мааааленькую функцию в длл для чтения файла ини и вызовом ее в программе. Вот тогда вам почет и уважуха. А так я тож могу отвечать всем "шо вам мешает?", "читайте справку", "учите теорию".
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".
bush007 вне форума Ответить с цитированием
Старый 03.09.2009, 11:38   #25
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
bush007
Я скажу тебе только одно - если хочешь писать ДЛЛ которую можно использовать в Си то учи интерфейсы, Я лично никогда не делаю ДЛЛ для других языков. Все мои проекты рассчитанны только на классы Делфи, и я никогда не знаю никаких проблем когда высакивает дурацкая ситуация в которой нужно использовать указатели на непонятно что.

Я всегда делаю связку через классы, и мне все равно как будутпотом применять мою разработку в Сях. потому что я на такое извращение никогда не рассчитываю, и рассчитывать не буду, ибо знаю какое это гиблое дело.

Посему и если делаю что-то подобное то либо в BPL либо пишу стандартные обертки вроде такого:
Код:
library Project2;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses   sharemem,
  inifiles,
  SysUtils,
  Classes;

{$R *.res}
  var ini:TIniFile;
  procedure crea(f:pchar);   stdcall;
  begin
  if ini<>nil then ini.Free;
   ini:=TIniFile.Create(f);
  end;

  procedure wri(sec,key,value:pchar);  stdcall;
  begin
   ini.WriteString(sec,key,value);
  end;

  function rea(sec,key:pchar):string;  stdcall;
  begin
    Result:=ini.ReadString(sec,key,'');
  end;

  procedure fre; stdcall;begin ini.Free; end;

  exports crea,wri,rea,fre;
begin
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2009, 13:43   #26
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

Спасибо Стилет за наводку

Вот такие дела. В принципе название темы решено (создание ini-файла с помощью dll)
пример прилагаю. если кому поможет- будем рады. Конечно читать этот файл тоже будем, но чуть позже, пока на паузу поставлю.
Вложения
Тип файла: zip post.zip (194.4 Кб, 15 просмотров)
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".

Последний раз редактировалось Stilet; 04.09.2009 в 08:59.
bush007 вне форума Ответить с цитированием
Старый 04.09.2009, 00:47   #27
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от bush007 Посмотреть сообщение
Вот такие дела. В принципе название темы решено (создание ini-файла с помощью dll)
пример прилагаю. если кому поможет- будем рады. Конечно читать этот файл тоже будем, но чуть позже, пока на паузу поставлю.
Я таки не понял, зачем в примере функция копирования файлов Использующихся в этот момент другими программами, к тому же не рабочая, а про Ini там ни слова, ну только исходник самой dll !

Вот написал другую функцию LoadFromFile:

Код:
function CopyExclusive(AppName, SaveToFile: string): Boolean;
 var
  aStream: TFileStream;
  bStream: TMemoryStream;
begin
  Result:= False;
 try
  aStream:= TFileStream.Create(ParamStr(0),fmShareDenyWrite);
  bStream:= TMemoryStream.Create;
  try
   bStream.LoadFromStream(aStream);
   bStream.SaveToFile(SaveToFile);
   Application.ProcessMessages;
  finally
   aStream.Free;
   bStream.Free;
  end;
 except
   Result:= False;
   aStream.SafeCallException(aStream,0);
   bStream.SafeCallException(bStream,0);
 end;
  Result:= True;
end;
uberchel вне форума Ответить с цитированием
Старый 04.09.2009, 10:10   #28
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

>только исходник самой dll !
O_o ! Сорри, народ! Перед вложением я вроде все проверял , исправлю как только доберусь до своего архива.(скорей всего архивы перепутал).
и все же, uberchel , есть идеи как читать ини файл с помощью длл, только с примером, и в длл и в основной программе? писать то дефолтный ини через длл я научился, не вопрос, а как читать его? Я понимаю конечно что все примеры приведенные вполне работоспособны, но к сожалению без примера использования их в основной проге
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".

Последний раз редактировалось bush007; 04.09.2009 в 10:21.
bush007 вне форума Ответить с цитированием
Старый 04.09.2009, 11:58   #29
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Значт так. Не долго мудрствуя, дабы доказать мсье Бушу007 что его попытки работать с классами в DLL весима некузявы, я набросал простеникий примерчик работы с INI файлом через WinAPI.
Итак, сам проект работает только с типами строк. но и остальные типы можно писать в ИНИ, покопавшись в хелпе по функциям работы с ИНИ:

DLL:
Код:
library Project2;
uses   windows,
  SysUtils,
  Classes;

var fn:string;

{$R *.res}
procedure Crea(PilaName:PChar);stdcall;begin fn:=PilaName;end;

procedure wri(Section,Key,Value:Pchar);stdcall;
begin
 WritePrivateProfileString(Section,Key,Value,pchar(fn));
end;
function rea(Section,Key:pchar):pchar;  stdcall;
begin
 GetMem(Result,100);
 GetPrivateProfileString(Section,Key,'',Result,100,pchar(fn));
end;

 exports Crea,wri,rea;
begin
end.
Форма:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 procedure Crea(PilaName:PChar); stdcall; external 'project2.dll';
 procedure wri(Section,Key,Value:Pchar);stdcall;external 'project2.dll';
 function rea(Section,Key:pchar):pchar;  stdcall;external 'project2.dll';
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Crea('c:\temp\ini.ini');
wri('qq','ww','2');
caption:=rea('qq','ww');
end;

end.
Здесь используются функции winAPI, оберткой над которыми есть класс (угадайте кто?) TIniFiles и его предки.

Советую автору задуматься о своей стратегии и всетки перейти на методы, понятные даже Сям - WinAPI.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.09.2009, 22:57   #30
bush007
Форумчанин
 
Аватар для bush007
 
Регистрация: 10.02.2009
Сообщений: 226
По умолчанию

О! сбылась мечта посмотреть таки незаморочный рабочий код! Стилет, у меня нет слов! Но тогда вопрос такой: насколько вообще оправдано создание длл в "небольших" программах? если те же ини-файлы простейше читаются с самой программы без всякого гемора? До того как пробовать работать с длл я за вечер накидал исходник такого плана, пишешь в лейблах параметры авторизации, созраняешь как профиль в ини, хоть сто штук, грузишь любой профиль и почта уходит на ура. а тут такой конфуз . Верно ли утверждение, что создание и использование длл оправдано только в больших проектах?

То uberchel-- я и правда перепутал архивы, исправляюсь (некузявое создание ini-файла с помощью dll)
Вложения
Тип файла: zip post_work.zip (198.8 Кб, 8 просмотров)
следи за собой. Будь осторожен.
Не забывай свой первый "hello world".

Последний раз редактировалось bush007; 04.09.2009 в 23:00.
bush007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TShortCut и INI-файл Sd.Ghost Общие вопросы Delphi 4 07.04.2011 22:32
ini файл cheef Общие вопросы Delphi 5 28.04.2009 07:36
RichView и ini файл KWN, lnc Компоненты Delphi 0 10.02.2009 09:21
ini Файл Volkogriz Общие вопросы Delphi 1 12.11.2008 13:44
ini файл Simply-Art Общие вопросы Delphi 3 17.06.2007 14:43