一个类的功能怎么在DLL中表现出来让别人用啊?
一个类的功能怎么在DLL中表现出来让别人用啊?是不是非要把类的所有public的成员函数都用全局函数包装一下,如下例,但这样不是麻烦得要命,还有没好的解决方法???
DLL文件1:
extern "C" __declspec(dllexport) char* __stdcall PrintString(char *str);
extern "C" __declspec(dllexport) CTest* __stdcall NewCTestInstance();
extern "C" __declspec(dllexport) void __stdcall DeleteCTestInstance(CTest* p);
extern "C" __declspec(dllexport) void __stdcall PrintMsg(CTest* p);
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
char* __stdcall PrintString(char *str)
{
MessageBox(NULL,str,"信息",MB_ICONINFORMATION);
return str;
}
CTest* _stdcall NewCTestInstance()
{
CTest *p;
p = new CTest;
return p;
}
void __stdcall DeleteCTestInstance(CTest* p)
{
memset(p->m_Msg,0,20);
delete p;
}
void __stdcall PrintMsg(CTest* p)
{
p->PrintMessage(NULL);
}
DLL文件2:
class CTest
{
public:
char m_Msg[20];
public:
void PrintMessage();
void PrintMessage(char *msg);
CTest(){};
CTest(char *msg){
strcpy(m_Msg,msg);
}
~CTest(){};
};
void CTest::PrintMessage()
{
MessageBox(NULL,"CTest::PrintMessage()","信息",MB_ICONINFORMATION);
}
void CTest::PrintMessage(char *msg)
{
if(msg!=NULL)
strcpy(m_Msg,msg);
MessageBox(NULL,m_Msg,"信息",MB_ICONINFORMATION);
}
文件3:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
extern "C" __declspec(dllimport) char* __stdcall PrintString(char *str);
extern "C" __declspec(dllimport) CTest* __stdcall NewCTestInstance();
extern "C" __declspec(dllimport) void __stdcall DeleteCTestInstance(CTest* p);
extern "C" __declspec(dllimport) void __stdcall PrintMsg(CTest* p);
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CTest *p;
p = NewCTestInstance(); //new 一个对象
strcpy(p->m_Msg,"PrintMsg");
PrintMsg(p);
//p->PrintMessage(); //这个编译时不认,为什么???
DeleteCTestInstance(p); //释放一个对象
PrintMsg(p); //这句也有点奇怪,无效指针既然可被访问不出异常,虽然数据已不是"PrintMsg",而是乱七八糟的东西
}
//---------------------------------------------------------------------------