Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2008, 16:58
Nora Nora вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 7
Репутация: 10
По умолчанию dll

Несколько дней парюсь, чтобы подключить это творение к приложению (хоть консольному, хоть не консольному). Что было в плане доступной литературы- прочитала. Совсем простенькие функции подключаю, а ето не работает никак...

library PrDll;

Код:
uses
   ShareMem,
   SysUtils,
   Classes;

{$R *.res}
  function ChangeString(Str:string):string;stdcall; export; 
  var i,k:byte;

  begin
  k:=0;
for i:=1 to (Length(Str)) do
  begin
    if str[i]=(':') then
        inc(k);
      if k mod 2=0 then
        str[i]:=' ';
  end;
for i:=1 to (Length(Str)) do
  begin
     if str[i]=' ' then
       begin
         Delete (Str,i,1)
       end;
    end;
end;

exports ChangeString;
begin
end.
Admin: Пользуемся тегами!!!

Последний раз редактировалось Admin, 14.12.2008 в 17:01.
Ответить с цитированием
  #2  
Старый 14.12.2008, 17:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

угу, а кто для начала будет результат возвращать (через Result или имя функции)?

а какую ошибку пишет и в какой строке?
Ответить с цитированием
  #3  
Старый 15.12.2008, 03:13
Nora Nora вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 7
Репутация: 10
По умолчанию

(Application) Запускается, вводишь текст, нажимаешь button, а он выдает:
Project PrFormDll.exe raised exeption class EnvalidPointer with message 'Invalid pointer operation'. Process stopped. Use Step or Run to continue.
Ответить с цитированием
  #4  
Старый 15.12.2008, 03:28
Nora Nora вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 7
Репутация: 10
По умолчанию

Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   StrNew:String[255];
implementation
function MyFunc(str:string):string; stdcall;
external 'PrDll.dll' name 'ChangeString'; 
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
   StrNew:=Edit1.Text;
   MyFunc(strNew);
   Edit2.Text:=StrNew;
end;

end.
Ответить с цитированием
  #5  
Старый 15.12.2008, 09:44
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Попробуй один из этих вариантов:

В библиотеке убери строку "stdcall" и объяви импортируемую функцию одним из следующих способов, выбери что заработает:

Код:
function ChangeString(str:string):string; stdcall; external 'PrDll.dll'; 

function ChangeString(str:string):string; external 'PrDll.dll'; 

А если вообще ничего не получится то удали строку "export"

Последний раз редактировалось Vayrus, 15.12.2008 в 09:48.
Ответить с цитированием
  #6  
Старый 15.12.2008, 09:52
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Код:
function ChangeString(str:string):string; far; external 'PrDll.dll'; 
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #7  
Старый 15.12.2008, 13:13
Nora Nora вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 7
Репутация: 10
По умолчанию Новая неполадка

Код:
unit FormDll;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   StrNew:String[255];
implementation
function ChangeString(str:string):string;
external 'PrDll.dll' name 'ChangeString' index 1;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var x:string;
begin
  x:=edit1.Text;
  ChangeString (x);
  ShowMessage(x);
end;

end.


library PrDll;

uses
   ShareMem,
   SysUtils,
   Classes;

{$R *.res}
  function ChangeString(Str:string):string; Export;
  var i,k:byte;

  begin
  k:=0;
for i:=1 to (Length(Str)) do
  begin
    if str[i]=(':') then
        inc(k);
      if k mod 2=0 then
        str[i]:=' ';
  end;
for i:=1 to (Length(Str)) do
  begin
     if str[i]=' ' then
       begin
         Delete (Str,i,1)
       end;
    end;
    result:=str;
end;

exports ChangeString Index 1;
begin
end.
Ответить с цитированием
  #8  
Старый 15.12.2008, 13:16
Nora Nora вне форума
Прохожий
 
Регистрация: 08.12.2008
Сообщения: 7
Репутация: 10
По умолчанию

Библиотека, похоже, подключилась, только вот функция должна удалять четные двоеточия, а она даром хлеб ест... В консольном приложении работает...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025