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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2009, 19:11   #1
Владимир1988
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 25
По умолчанию DLL

Подскажите пожалуйста, почему программа пишет, что параметр v1 не определен, если я его определил в классе?
Код:
library DLL2;

uses
  SysUtils,
  Classes,
  Dialogs,
  Windows;
{$R *.res}
type
  TMyClass = class(TObject)
    v1: string;
    v2: string;
  end;
 procedure MyFirstFunc; stdcall
 var
 flag:boolean;
begin
  flag:=true;
  if (v1<2) or (v1>10) then
    begin
    flag:=false;
     Exit;
    end;
  if (v2<2) or (v2>10) then
    begin
    flag:=false;
    Exit;
    end;
   if flag =false then
     begin
       MessageBox(0, 'Значения должны быть от 2 до 10. Повторите ввод', 'dll', MB_OK);
       Exit;
    end;
end;
exports
   MyFirstFunc;
begin
end.

Последний раз редактировалось Stilet; 27.11.2009 в 08:14.
Владимир1988 вне форума Ответить с цитированием
Старый 26.11.2009, 20:25   #2
Ti_pain)
Пользователь
 
Регистрация: 04.11.2009
Сообщений: 39
По умолчанию

Я конешно не сильно в етом разбераюсь но походу ети параметры надо передавать с основной прогарми
procedure MyFirstFunc(v1,v2.....); stdcall
только тип стринг лутче не использовать
НАпример (Ps седне на лекции было)
procedure MyFirstFunc(v1,v2:PChar); stdcal;

Последний раз редактировалось Ti_pain); 26.11.2009 в 20:33.
Ti_pain) вне форума Ответить с цитированием
Старый 26.11.2009, 20:59   #3
Владимир1988
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 25
Восклицание

А можно ли эти параметры v1 и v2 потом использовать в DLL не объявляя?
Владимир1988 вне форума Ответить с цитированием
Старый 26.11.2009, 21:18   #4
Ti_pain)
Пользователь
 
Регистрация: 04.11.2009
Сообщений: 39
По умолчанию

НУ да )) я так понял происходит фильтрация ввода только для "2".."10") и у тебя там сравнивается символы с цифрами:

if (v1<2) or (v1>10) ну так нельзя делать)) нужно или передавать к процедуре чисельный тип ну или переводить в самой процед
procedure MyFirstFunc (v1,v2: TChar);
var a,b:integerl;
begin
a:=StrToInt(v1);
b:=StrToInt(v1);
..................
Ti_pain) вне форума Ответить с цитированием
Старый 27.11.2009, 08:20   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вы оба не правы.
Цитата:
Владимир1988
Ты описал только класс - это шаблон, тип... это не переменная.
Теперь тебе нужно описать переменную этого типа, так чтоб она использовалась в процедуре.
допустим ты хочешь в нее передавать экземпляр твоего класса тогда:
Код:
type
  TMyClass = class(TObject)
    v1: string;
    v2: string;
  end;

 procedure MyFirstFunc(My:TMyClass); stdcall
 var
 flag:boolean;
begin
 if My=nil then exit;
  flag:=true;
 with my do begin
// Вместо тех ифов я предлагаю что-то типа:
  flag:=not((v1<'2') or (v1>'10')) or not((v2<'2') or (v2>'10'));
   if flag =false then
     begin
       MessageBox(0, 'Значения должны быть от 2 до 10. Повторите ввод', 'dll', MB_OK);
       Exit;
    end;
 end {WITH}
end;
exports
   MyFirstFunc;
begin
end.
Смысл понятен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку kapustin Общие вопросы .NET 10 23.09.2009 22:20
DLL michaellos Фриланс 1 13.11.2007 16:02
DLL Shico Win Api 1 16.04.2007 16:24