Witam, Nazywam się Piotrek, Programowaniem zająłem się niedawno, Kurs Mirosława Zelenta o C++ Konsoli i CPP Builderze przerobiłem z oceną dostateczną, więc postanowiłem napisać swój pierwszy program z wykorzystaniem biblioteki DLL, przy użyciu Popularnego CPP Buildera 6.0, Sam program bez biblioteki skompilował się Poprawnie i działa sprawnie tak jak sobie założyłem.
Program to jest miniaturowa Baza danych Base 2.0 przechowywująca dane i zapisująca bitmapy do pliku, wszystko działa ok, bez biblioteki dll nie ma komunikatu o braku tylko program sie wyłącza :) Ale nie o tym chciałem pisać, Problem zaczyna się przy procesie tworzenia DLLa, do programu. Dllka ma za zadanie wyświetlić AboutProgram i wyświetlić okno ustawień dodania lini i wycięcia lini a także dodania kolumn i ich usunięcia. Szablony mam zrobione Sam About Program kompiluje się ok i działa sprawnie, natomiast problem się pojawia przy dodaniu do projektu formy z ustawieniami settings, mam okodowane wszystko, ale kompilator zwraca:
[C++ Error] SettingsSecton.cpp(19): E2451 Undefined symbol 'Form1'
[C++ Error] SettingsSecton.cpp(24): E2451 Undefined symbol 'Form1'
[C++ Error] SettingsSecton.cpp(29): E2451 Undefined symbol 'Form1'
[C++ Error] SettingsSecton.cpp(34): E2451 Undefined symbol 'Form1'
Legenda:
Form1-> główny program, którego dotyczą ustawenia.
SettingsSection.cpp kod źródłowy sekcji settings głównego programu.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "SettingsSecton.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSettings *Settings;
//---------------------------------------------------------------------------
__fastcall TSettings::TSettings(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TSettings::Button1Click(TObject *Sender)
{
Form1->StringGrid1->RowCount++;
}
//---------------------------------------------------------------------------
void __fastcall TSettings::Button2Click(TObject *Sender)
{
Form1->StringGrid1->ColCount++;
}
//---------------------------------------------------------------------------
void __fastcall TSettings::Button3Click(TObject *Sender)
{
Form1->StringGrid1->RowCount--;
}
//---------------------------------------------------------------------------
void __fastcall TSettings::Button4Click(TObject *Sender)
{
Form1->StringGrid1->ColCount--;
}
//---------------------------------------------------------------------------
//To jest kod z c++ Buildera 6.0, sekcji settings głównego programu
Form1->Program główny
SettingsSection.cpp -> sekcja ustawień do programu, która ma zostać wyświetlona z biblioteki DLL.
Tutaj jest kod źródłowy biblioteki DLL:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include "AboutProgram.h"
#include "SettingsSecton.h"
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
extern "C" __declspec(dllexport)void AboutSection(AnsiString pName);
extern "C" __declspec(dllexport)void SettingsSection(AnsiString);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
void AboutSection (AnsiString pName)
{
TAboutProgramSection *AboutProgram = new TAboutProgramSection(NULL);
AboutProgram->Label1->Caption = pName;
AboutProgram->ShowModal();
delete AboutProgram;
}
void SettingsSection (AnsiString)
{
TSettings *SettingsSection = new TSettings(NULL);
SettingsSection->ShowModal();
delete SettingsSection;
}
//---to jest DLLka do programu głównego Base 2.0---
Mam zadeklarować po prostu tutaj w tej forme Settings plik nagłówka głównego programu? Czy muszę gdzieś indziej to zadeklarować? Pomożecie?