Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 16.04.2011, 20:02   #1
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
По умолчанию Ошибка Function needs result type. Что не так?

Доброго времени суток. Дана лёгкая задача: Дана строка, посчитать кол-во знаков до (';'). Написать программу используя DLL. Когда функция в DLL уже написана и обьявляется в приложении возникает ошибка и компил. ругается. Говорит мол Function needs result type, хотя там не нужно не типа выходн. результата, ни переменных.... Вот коды DLL и приложения её использ.


DLL
Код:
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
  SysUtils,
  Classes;

{$R *.res}

Function SizeToDot(S:string):integer; StdCall
Begin
 Result:=(Pos(s,';'))-1;
end;
exports SizeToDot;

begin
end.

Aplication
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    function SizeToDot (s:string):integer;stdcall;


  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation
{$R *.dfm}
Function SizeToDot; external 'Project2.dll' name 'SizeToDot';{выделяет эту строку и ругается}

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  col:integer;
begin
S:=Edit1.Text;
Col:=SizeToDot(s);
Label1.Caption:='Êîë-âî çíàêîâ äî ; = '+inttostr(Col);
end;

end.
Crabobass вне форума Ответить с цитированием
Старый 17.04.2011, 04:41   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

затулить объявление глобальной импортируемой функции в методы формы — это хитро.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 17.04.2011, 14:41   #3
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
По умолчанию

А куда надо?
Crabobass вне форума Ответить с цитированием
Старый 17.04.2011, 14:46   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

в глобальную область, вне типа.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

function SizeToDot (s:string):integer;stdcall;

var
  Form1: TForm1;

implementation
{$R *.dfm}
Function SizeToDot; external 'Project2.dll' name 'SizeToDot';

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  col:integer;
begin
S:=Edit1.Text;
Col:=SizeToDot(s);
Label1.Caption:='Êîë-âî çíàêîâ äî ; = '+inttostr(Col);
end;

end.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.04.2011, 15:11   #5
Crabobass
Пользователь
 
Регистрация: 06.03.2011
Сообщений: 23
По умолчанию

спасибо огромное, а то нам толком не объяснили на занятиях.
Crabobass вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вылазает ошибка. Почему что не так? xakkkkker Паскаль, Turbo Pascal, PascalABC.NET 7 18.04.2010 09:54
Выдаёт ошибку!"Warning: mysql_result() [function.mysql-result" djsliva PHP 2 24.01.2010 15:27
Ошибка! Подскажите что не так? stear Общие вопросы C/C++ 7 10.12.2009 16:12
C++ ошибка в коде. Непонимаю что не так POPOV Помощь студентам 2 04.09.2008 17:04
ошибка CommandText does not return a result set furstenberg БД в Delphi 2 04.02.2008 17:38


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840