嘿嘿,怪问题,高手们Show一下你们的Quality.(DLL创建类的问题)
yesry 2003-10-28 09:57:27 //-*-*-*-*-*-*-文件Dll Class.dll
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//----------------------------------------------------
TCanvas *canvas;
class MyClass2
{
public:
char name[128];
TCanvas *Canvas;
MyClass2()
{
Canvas=canvas;
}
virtual void F1()
{
ShowMessage("MyClass2 F1 in dll");
}
virtual void F2(TCanvas *canvas)
{
Canvas=canvas;
strcpy(name,"MyClass F2 in dll");
Canvas->Pen->Style=psDot;//如果没有这一句话,程序关闭的时候很安全
Canvas->TextOutA(0,0,"MyClass F2 in dll");
}
};
extern "C"
__declspec(dllexport) MyClass2 * WINAPI
CreateMyClass(TCanvas *Canvas)
{
canvas=Canvas;
return new MyClass2;
}
//-*-*-*-*-*-*-文件exe
#include <vcl.h>
#pragma hdrstop
#include "uTestMyClass.h"
//-----------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------------------------------------------
class MyClass
{
public:
char name[128];
TCanvas *Canvas;
virtual void F1()
{
ShowMessage("MyClass2 F1 in exe");
}
virtual void F2(TCanvas *Canvas)
{
strcpy(name,"MyClass F2 in exe");
Canvas->TextOutA(0,0,"MyClass F2 in exe");
}
};
MyClass * WINAPI (*CreateMyClass)(TCanvas *Canvas);
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HMODULE h;
h=LoadLibrary("Class.dll");
(void*)CreateMyClass=GetProcAddress(h,"CreateMyClass");
MyClass *d;
d=CreateMyClass(Canvas);
d->F2(Canvas);
}
如果没有这一句话,程序关闭的时候很安全
Canvas->Pen->Style=psDot;
多了他,问题就来了,怎么回事?