Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Вызов функции, написанной в одном модуле из другого модуля   Найти похожие ветки 

 
markon ©   (2005-09-14 00:14) [0]

Здравствуйте!

У меня есть несколько модулей. В 1-м написаны процедуры и функции, которые должны вызываться из других модулей.

В том модуле, где происходит вызов я написал в implementation uses unit1. При вызове функции выдаётся ошибка Undeclared identifier с указанием на имя функции.
Пробовал объявить функцию в модуле 1 как
function inttobin(decvalue: Integer): String; far; - не помогло.

Если я объявляю в модуле 2 эту функцию в секции interface - выдаётся ошибка Unsatisfied forward or external declaration
Если делаю в модуле 2 следущее объявление - inttobin: function(decvalue: Integer): String; - программа запускается, но падает с ошибкой ...raised exception class EAxcessVioliation... Read of address 0000000...

В чём здесь дело?


 
TUser ©   (2005-09-14 00:21) [1]

> В том модуле, где происходит вызов я написал в implementation uses unit1. При вызове функции выдаётся ошибка Undeclared identifier с указанием на имя функции.

Точно все имена модуля/функций правильно написал??


 
Германн ©   (2005-09-14 00:49) [2]


> У меня есть несколько модулей. В 1-м написаны процедуры
> и функции, которые должны вызываться из других модулей.


А в этом самом 1-м модуле эти процедуры и фунуции продекларированы в секции interface?


 
Думкин ©   (2005-09-14 08:30) [3]

Можно прописать ораздел деклараций  т.п тут. В приемлемом приближении?


 
Думкин ©   (2005-09-14 08:31) [4]

А про Виалейшн - тут код давай. а то я знаю уже где ошибка - в 17-й строке.


 
begin...end ©   (2005-09-14 08:39) [5]

> markon ©   (14.09.05 00:14)

> function inttobin(decvalue: Integer): String; far; - не
> помогло.

far вообще игнорится компилятором.


 
Tonich ©   (2005-09-14 09:02) [6]


> inttobin: function(decvalue: Integer): String;

а что это за объявление такое?


 
PVOzerski ©   (2005-09-14 09:40) [7]

2Tonich ©   (14.09.05 09:02) [6]:
похоже на объявление процедурной переменной


 
PVOzerski ©   (2005-09-14 09:47) [8]

1) Надеюсь, заголовки функций, реализованных в implementation-разделе 1-го модуля, повторены в его же interface-секции?

2) Об Access violation. Похоже, что происходит следующее. Ты не получил (см. п. 1) и заменил (или получил, но перекрыл) идентификатор, обозначающий функцию, описанную в unit1, идентификатором, описанным во 2-м модуле и обозначающим процедурную переменную (см. [7]). Естественно, до присвоения ей значения она будет nil (если глобальная) или не весть чем (это если в стеке). Nil - это как раз address 0000000...


 
Плохиш ©   (2005-09-14 10:46) [9]

А читать книжки так ещё никто и не посоветовал.


 
markon ©   (2005-09-14 12:45) [10]

Насчёт объявлений в первом модуле - вот вырезки:

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Menus, ComCtrls, ToolWin, StdCtrls;
type
TForm1 = class(TForm)
...
   function inttohex1(dec_value: Integer): String; - объявляю свою функцию
 private
   { Private declarations }
 public
   { Public declarations }  - пробовал объявлять здесь, тоже не работает...
 end;
var
 Form1: TForm1;
 ...
implementation
...
uses ..., unit7;

function inttohex1(dec_value: Integer): String; - моя функция
...
begin
...
end;

В модуле 2 в секции implementation написано uses unit1.

Когда я в модуле 2 не объявляю функцию вообще, то ошибка Undeclared identifier inttohex1. Я так понимаю, что если в модуле 1 функция правильно объявлена и в модуле 2 есть uses unit1, то после компиляции все функции 1-го модуля должны быть доступны для вызова из 2-го. Проблема видимо только в объявлении функции в 1-м модуле...

Вот что делать, правильно объявлять в 1-м, если не правильно, или нужно объявлять во 2-м. Но как и зачем всё-таки это нужно?
Может нужно функцию вызвать каким-то иным способом?


 
PVOzerski ©   (2005-09-14 13:32) [11]

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, ToolWin, StdCtrls;
type
TForm1 = class(TForm)
...
  function inttohex1(dec_value: Integer): String; - объявляю свою функцию
private
  { Private declarations }
public
  { Public declarations }  - пробовал объявлять здесь, тоже не работает...
end;
var
Form1: TForm1;
...
function inttohex1(dec_value: Integer): String;
implementation
...
uses ..., unit7;

function inttohex1(dec_value: Integer): String; - моя функция
...
begin
...
end;

В заключение: уясни для себя, чем методы классов отличаются от обычных функций - и по сути, и по объявлению.


 
Digitman ©   (2005-09-14 13:45) [12]


> markon ©   (14.09.05 12:45) [10]


думай и комментируй ВСЛУХ - что тобой предписывалось компилятору, когда ты ДВАЖДЫ объявил идентификатор inttohex1 в разделе INTERFACE  своего модуля ..

ВСЛУХ думай !

..


 
markon ©   (2005-09-14 14:10) [13]

А, я понял... Я просто дятел непомнящий :). Написал свою функцию как метод класса формы... Это просто от невнимательности... Прошу прощения и всем спасибо. Теперь работает.



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

Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
4-1124203470
s999
2005-08-16 18:44
2005.10.16
TranslateMessage и VK_HOME, VK_END...


3-1125513802
Knight
2005-08-31 22:43
2005.10.16
Как можно сохранить в базе текст с картинками?


4-1124115667
NikNet
2005-08-15 18:21
2005.10.16
ListBox с иконками слева?


8-1116759693
scrazy
2005-05-22 15:01
2005.10.16
Удаление невидимых линий(точек) на объёмных телах


14-1127143583
Ученик чародея
2005-09-19 19:26
2005.10.16
Что сейчас представляла бы собой Россия,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский