Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
при компиляции на билдере 6 выскакивает ошибка ошибка ---- [Linker Error] Unresolved external 'RC4_Start(unsigned char *, unsigned)' referenced from E:\......\UNIT1.OBJ, хоть код и компилеться без ошибон(но он еще не дописан до конца), но проверяя на работоспособность при компиляции выкидывает ошибку линкера.
 
перелазил много форумов и там пишут везде что что типо нужно подключать какието библиотеки для правильной работы функций. но я в своей проге никаких библиотек не подключаю их у меня и нету а она серавно ругается. прошу помочь и обьяснить хоть немного что можно сделать что бы ету ошибку предотвратить( не используя ету библиотеку =\). запуская в консольном режиме все пахало(правда там читалось сообщение из файла + ключ также читался тупо из файла) и не ругалось , а вот когда стал вылаживать на форму сразу перестало линковаться. ниже код проги

*.cpp
Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------



//----------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(!OpenDialog1->Execute())
                return;
        Edit1->Text = OpenDialog1->FileName;
        load(OpenDialog1->FileName);
        Memo1->Text = oText;
}
//--------------------------------
void load(AnsiString file_name)
{
        FILE *ofile;

        ofile = fopen(file_name.c_str(), "r");
        if(ofile == NULL )
                exit(0);

   while(!feof(ofile))
        {
              count = (int)fread(oText, sizeof(char),10000000, ofile );
              if(ferror(ofile))
              {
                      perror("Error of reading...");
                      break;
              }

        total += count;
        }
   fclose(ofile);

   oText[total] = '\0';
   oTextSize = total;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    if(!SaveDialog1->Execute())
                return;
        Edit2->Text = SaveDialog1->FileName;
        save(SaveDialog1->FileName);
}
//---------------------------------------------------------------------------
void save(AnsiString file_name)
{
        FILE *cfile;
        cfile = fopen(file_name.c_str(), "w");
        if(cText == NULL )
                exit(1);
        fwrite(cText, sizeof(char),cTextSize, cfile);
        fclose(cfile);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
exit(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 if(Edit1->Text == "")
        {
                MessageBox(NULL,"&#194;&#251;&#225;&#229;&#240;&#232;&#242;&#229; &#244;&#224;&#233;&#235; &#228;&#235;&#255; &#248;&#232;&#244;&#240;&#238;&#226;&#224;&#237;&#232;&#255;!!!","&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;!",0);
                return;
        }

        if(Edit2->Text == "")
        {
                MessageBox(NULL,"&#194;&#251;&#225;&#229;&#240;&#232;&#242;&#229; &#244;&#224;&#233;&#235; &#228;&#235;&#255; &#240;&#224;&#241;&#248;&#232;&#244;&#240;&#238;&#226;&#224;&#237;&#232;&#255;!!!","&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;!",0);
                return;
        }
         if(Edit3->Text == "")
        {
                MessageBox(NULL,"&#237;&#243;&#235;&#229;&#226;&#238;&#229; &#231;&#237;&#224;&#247;&#229;&#237;&#237;&#232;&#229; &#234;&#235;&#254;&#247;&#224;!!!","&#194;&#237;&#232;&#236;&#224;&#237;&#232;&#229;!",0);
                return;
        }
        //OemToChar(Edit3->Text.c_str(),Key);
        unsigned char* a=AnsiString(oText).c_str();
        unsigned char* b=AnsiString(oText).c_str();
        swap_char(a,b);
        unsigned char* key=AnsiString(Edit3->Text).c_str();
        //unsigned long key_len=strlen(AnsiString(Edit3->Text).c_str());
        RC4_Start(key,key_len);
}

typedef struct
{
   unsigned char i;
   unsigned char j;
   unsigned char sbox[SBOX_SIZE];
   unsigned char *data;
   unsigned long data_len;
} RC4_Session;
//-----------------------------------
inline void swap_char(unsigned char *a, unsigned char *b)
{
   unsigned char t;
   t = a[0]; a[0] = b[0]; b[0] = t;
};
//----------------------
void RC4_Start(RC4_Session &session, unsigned char *key, unsigned long key_len)
{
   

   unsigned long i, j=0;   
   unsigned char kbox[65536]; 
   for (i=0; i<SBOX_SIZE_DIV_16; i++)
   {
      session.sbox[i]     = (i     & 0xFF);
      session.sbox[i+4096]  = (i+4096  & 0xFF);
      session.sbox[i+8192]  = (i+8192  & 0xFF);
      session.sbox[i+12288]  = (i+12288  & 0xFF);
      session.sbox[i+16384] = (i+16384 & 0xFF);
      session.sbox[i+20480] = (i+20480 & 0xFF);
      session.sbox[i+24576] = (i+24576 & 0xFF);
      session.sbox[i+28672] = (i+28672 & 0xFF);
      session.sbox[i+32768]  = (i+32768  & 0xFF);
      session.sbox[i+36864]  = (i+36864  & 0xFF);
      session.sbox[i+40960]  = (i+40960  & 0xFF);
      session.sbox[i+45056] = (i+45056 & 0xFF);
      session.sbox[i+49152] = (i+49152 & 0xFF);
      session.sbox[i+53248] = (i+53248 & 0xFF);
      session.sbox[i+57344] = (i+57344 & 0xFF);
      session.sbox[i+61440] = (i+61440 & 0xFF);
   }
   if (key_len > 0)
   {
      for (i=0; i<65536; i++)
      {
         kbox[i] = key[j];
         if (++j == key_len) { j = 0; }
      }
   }
   else
   {
      for (i=0; i<65536; i++) { kbox[i] = 0; }//;
   }
   j = 0;
   for (i=0; i<SBOX_SIZE; i++)
   {
      j = (j + kbox[i] + session.sbox[i]) & 0xFF;
      swap_char(&session.sbox[i], &session.sbox[j]);
   }
   session.i = 0;
   session.j = 0;
}
unsigned char RC4_Gen(RC4_Session &session)
{

   unsigned char xi, a, b;

   a = session.i;
   b = session.j;

   a++;
   b += session.sbox[a];

   swap_char(&session.sbox[a], &session.sbox[b]);

   xi = session.sbox[b] + session.sbox[a];
   xi = session.sbox[xi];

   session.i = a;
   session.j = b;

   return xi;
}


*.h
Код
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include <SysUtils.hpp>
#include <iostream>
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SBOX_SIZE 65536
#define SBOX_SIZE_DIV_16 4096
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TButton *Button1;
        TButton *Button2;
        TEdit *Edit1;
        TEdit *Edit2;
        TOpenDialog *OpenDialog1;
        TSaveDialog *SaveDialog1;
        TMemo *Memo1;
        TButton *Button3;
        TButton *Button4;
        TEdit *Edit3;
        TLabel *Label1;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
private:   // User declarations
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
};
unsigned char a;
unsigned char b;
unsigned char key;
unsigned long key_len;
unsigned char Key[16];
char oText[10000000],cText[10000000];
int  count, total = 0;
size_t oTextSize = 0;
size_t cTextSize = 0;

void load(AnsiString);
void save(AnsiString);
void RC4_Start(unsigned char*, unsigned long);
inline void swap_char(unsigned char*, unsigned char*);

//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Изменено: Олег Дёмин - 19.04.2009 02:45:28
 
Ну сам сравни
В cpp файле
void RC4_Start(RC4_Session &session, unsigned char *key, unsigned long key_len)

В h файле
void RC4_Start(unsigned char*, unsigned long);


У тебя нет определения функции void RC4_Start(unsigned char*, unsigned long), а есть только void RC4_Start(RC4_Session &session, unsigned char *key, unsigned long key_len)но это сомсем другая функция, хотя и имеет тоже имя!!!!!
 
т.е. нужно в h файле описать функцию void RC4_Start(RC4_Session &session, unsigned char*, unsigned long)  вот так? пытаюсь так описать ругается ваще ппц.....
Изменено: Олег Дёмин - 19.04.2009 13:30:11
 
У тебя 2 различные функции, которые имеют одинаковое называются, но принимают разное количество аргументов, C++ такое позволяет
Но такое лучше не делать, а то запутаешься в их именах и аргументах. Очевидно у тебя при переносе из старого проекта в этот новый потерялось определение функции

//Вставь эту пустую функцию в CPP файл и у тебя всё скомпилируется
void RC4_Start(unsigned char*, unsigned long){

};
но т.к. функция пустая программа не будет корректно работать, но по крайней мере запустится
//==========================================================­=============
А потом найди в своём старом проекте эту функцию и замени мою заглушку на оригинальную функцию
 
Помогите пожайлуста )

Ошибка
[Linker Error] Unresolved external 'TForm1::'referenced from D:....obj

Вот текст программы:


#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
double TotalTime = 0;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a=0;
if (Edit1->Text=="5")
a++;
if (Edit2->Text=="7")
a++;
if (Edit4->Text=="2")
a++;
if (Edit6->Text=="3")
a++;
if (Edit8->Text=="6")
a++;
if (Edit9->Text=="4")
a++;
if (Edit12->Text=="4")
a++;
if (Edit13->Text=="6")
a++;
if (Edit14->Text=="5")
a++;
if (Edit15->Text=="9")
a++;
if (Edit16->Text=="1")
a++;
if (Edit19->Text=="9")
a++;
if (Edit21->Text=="2")
a++;
if (Edit23->Text=="1")
a++;
if (Edit25->Text=="8")
a++;
if (Edit27->Text=="5")
a++;
if (Edit28->Text=="2")
a++;
if (Edit29->Text=="4")
a++;
if (Edit32->Text=="7")
a++;
if (Edit35->Text=="1")
a++;
if (Edit36->Text=="3")
a++;
if (Edit39->Text=="3")
a++;
if (Edit40->Text=="4")
a++;
if (Edit41->Text=="6")
a++;
if (Edit42->Text=="1")
a++;
if (Edit43->Text=="7")
a++;
if (Edit46->Text=="1")
a++;
if (Edit47->Text=="6")
a++;
if (Edit50->Text=="3")
a++;
if (Edit53->Text=="4")
a++;
if (Edit54->Text=="8")
a++;
if (Edit55->Text=="4")
a++;
if (Edit57->Text=="5")
a++;
if (Edit59->Text=="9")
a++;
if (Edit61->Text=="2")
a++;
if (Edit63->Text=="7")
a++;
if (Edit66->Text=="8")
a++;
if (Edit67->Text=="1")
a++;
if (Edit68->Text=="4")
a++;
if (Edit69->Text=="5")
a++;
if (Edit70->Text=="3")
a++;
if (Edit73->Text=="6")
a++;
if (Edit74->Text=="9")
a++;
if (Edit76->Text=="8")
a++;
if (Edit78->Text=="7")
a++;
if (Edit80->Text=="5")
a++;
if (Edit81->Text=="1")
a++;
if (a==47)
LabelOtwet->Caption="Подравляем вы выйграли...";
if (a!=47)
LabelOtwet->Caption="Есть ошибки, либо не завершен...";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
exit (0);        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TotalTime += 0.001 * Timer1 -> Interval;
Edit82 -> Text = TotalTime;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Timer1 -> Enabled = !(Timer1 -> Enabled);
if (Timer1 -> Enabled == true)
Button3 -> Caption = "Пауза";
else
Button3 -> Caption = "Старт";
}
//---------------------------------------------------------------------------
Страницы: 1
Читают тему