• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вызов функций из внешнего модуля

  • Автор темы d777
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

d777

Нужна помощь.
Создаю модуль, в котором будут находиться некоторые функции.
CPP файл :
Код:
#include <vcl.h>
#pragma hdrstop
#include <Proc.h>
AnsiString SQL_str;



void Procdr::SQL_Formf (AnsiString Login_str);
{
Main->IBLogin->SelectSQL->Clear();
Login_str = Login->edit_login->Text;
SQL_str = "SELECT * FROM CARDS, USERS WHERE (CARDS.CID = USERS.ID) AND (USERS.LOGIN = '";
SQL_str = SQL_str + Login_str;
SQL_str = SQL_str + "')";
Main->IBLogin->SelectSQL->Add(SQL_str);
Main->IBLogin->Open();
Low->Caption = "Staff Department : User Card : " + Main->IBLogin->FieldByName("FULLNAME")->AsString;
}
H файл этого модуля
Код:
class Procdr
{
public:
static void SQL_Formf (AnsiString Login_str);
}
а потом в главном модуле
Код:
#include "Proc.h"
...
SQL_Formf(login_text);
получаю
[C++ Error] Login_Unit.cpp(111): E2268 Call to undefined function 'SQL_Formf'
почему из главного модуля нельзя обратиться к этой функции ? Объясните в чем проблема пожалуйста.
 
P

Pasha

Для: d777
Догадка, но:
Код:
void Procdr::SQL_Formf (AnsiString Login_str); <--- убери тут;
 
P

Pasha

Для: d777
В хедере:
Код:
class Procdr
{
public:
static void SQL_Formf1(char* str);
};
в CPP:
Код:
#include "Proc.h"
void Procdr::SQL_Formf1(char* str)
{
}
, в главном:
Код:
Procdr::SQL_Formf1(0);
Скорее всего у тебя в мелочах ошибка. Например, после объявления класса ; нет.
 
D

d777

Ошибка была очень глупая. Не был подключен Proc.cpp к проекту. Подключил. Появились другие ошибки, исправил. Теперь это выглядит так :
.CPP
Код:
#include <vcl.h>
#pragma hdrstop
#include <Proc.h>
AnsiString SQL_str;



void SQL_Formf (AnsiString Login_str)
{
Main->IBLogin->SelectSQL->Clear();
Login_str = Login->edit_login->Text;
SQL_str = "SELECT * FROM CARDS, USERS WHERE (CARDS.CID = USERS.ID) AND (USERS.LOGIN = '";
SQL_str = SQL_str + Login_str;
SQL_str = SQL_str + "')";
Main->IBLogin->SelectSQL->Add(SQL_str);
Main->IBLogin->Open();
Low->Caption = "Staff Department : User Card : " + Main->IBLogin->FieldByName("FULLNAME")->AsString;
}

.H
Код:
class Procdr
{
public:
static void SQL_Formf (AnsiString Login_str);
}

Появляется все та же ошибка. Хотя теперь ей казалось бы неоткуда браться.
char* ставить вместо AnsiString не хотелось бы.
[Linker Error] Unresolved external 'Procdr::SQL_Formf(System::AnsiString)' referenced from D:\MYPROJ\B_FILES\LOGIN_UNIT.OBJ
Мне кажется, это не мелочь. Ошибку линкера сложно назвать мелочью.
 
P

Pasha

Для: d777
Ну я же дал рабочий пример. Найди два отличия. Поставь точку с запятой после объявления класса и добавь Procdr:: перед именем функции в cpp.
 
D

d777

Для: Pasha
Большое спасибо. Вроде бы пробовал этот вариант, но сейчас ошибки не появляются. Другое дело, что это работает пока не так как надо. :)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!