|
정적으로 한개만 쓰겠다(DLL에 클래스 객체 한개 추가) 그러면 그럭저럭 어케어케 해서 돌릴 수 있을것 같은데..
동적으로 객체를 생성해서 여러군데서 써볼려고 했더니 답이 안나오더라구요.
그래서 불러다 쓸 폼이나 프레임에서 클래스 객체 선언해서 쓰면 간단히 해결될 줄 알았는데
DLL에 클래스 정의가 들어 있으니..
객체 만들어서 쓰면 될거 같은데.. 그렇지가 않네요...;;;
이거 혹 정적으로 DLL을 추가해서 그런가요? 동적으로 쓸려면 LoadLibrary()인가 이걸로 필요할때마다 폼이나 프레임에서 불러다가 써야 할가요?
참고로 BPL 만드는 법은 어케 하는지 모르겠습니다..;;; 만드는 방법도 좀 알려주시면 감사하겠습니다..(__)
장성호 님이 쓰신 글 :
: C++Builder 나 Delphi에서는 DLL보다 BPL(vcl용 확장 dll) 로 만드는 것이 훨씬 활용도가 높습니다.
:
: 음...
:
: dll로 만들고 header를 exe쪽 cpp에 include시키구..
: dll의 lib를 만들어서 exe프로젝트에 포함시키구..
: 그렇게 쓰면 되지 않을가요?
:
: 문론 bpl로 마찬가지구요
: 단지 bpl은 lib같은것 프로젝트에 만들어 포함시킬 필요가 없을뿐이구요
:
: 그럼..
:
:
:
:
: 이용태 님이 쓰신 글 :
: : 다음과 같은 클래스를 DLL로 만들었습니다.
: :
: : typedef class TESTCLASS
: : {
: : private :
: : int a;
: : int b;
: :
: : public :
: : TMyClass();
: : int getA();
: : int getB();
: : void setA(int s_A);
: : void setB(int s_B);
: : }TMyClass;
: :
: : TMyClass::TMyClass()
: : {
: : a = 10;
: : b = 20;
: : }
: :
: : int TMyClass::getA()
: : {
: : return a;
: : }
: :
: : int TMyClass::getB()
: : {
: : return b;
: : }
: :
: : void TMyClass::setA(int s_A)
: : {
: : a = s_A;
: : }
: :
: : void TMyClass::setB(int s_B)
: : {
: : b = s_B;
: : }
: :
: : 이렇게 만들어진 DLL를 빌더6.0 APP프로젝트 하나 만들어서 추가해서 사용할려고 하는데요..
: :
: : lib, dll파일 복사하고, lib 파일은 addto project해서 추가했습니다.
: :
: : 그런 다음에 폼에서 불러서 써볼려고 하는데요..
: :
: : 컴파일 하면.. 다음과 같은 에러가 뜹니다..;;
: : [C++ Error] Unit1.cpp(13): E2141 Declaration syntax error
: : [C++ Error] Unit1.cpp(18): E2451 Undefined symbol 'myClass'
: : [C++ Error] Unit1.cpp(18): E2303 Type name expected
: : [C++ Error] Unit1.cpp(18): E2379 Statement missing ;
: : [C++ Error] Unit1.cpp(25): E2451 Undefined symbol 'myClass'
: : [C++ Error] Unit1.cpp(25): E2121 Function call missing )
: :
: :
: : #include <vcl.h>
: : #pragma hdrstop
: :
: : #include "Unit1.h"
: : //---------------------------------------------------------------------------
: : #pragma package(smart_init)
: : #pragma resource "*.dfm"
: : TForm1 *Form1;
: :
: : TMyClass *myClass;
: : //---------------------------------------------------------------------------
: : __fastcall TForm1::TForm1(TComponent* Owner)
: : : TForm(Owner)
: : {
: : myClass = new TMyClass;
: : }
: : //---------------------------------------------------------------------------
: :
: :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: : ShowMessage(IntToStr(myClass->getB());
: : }
: : //---------------------------------------------------------------------------
: :
: : DLL에 정의된 클래스를 폼에서 그냥 선언해서 쓸 수는 없는거 같은데요..
: :
: : 어떻게 해야 할지 모르겠습니다..;;;
: :
: : 답변 부탁드려요..^^
|