在CBuilder4中,如何把已经做好的Form塞入dll中,通过dll使这个form能被exe调用。

blackdove 2000-11-28 03:32:00
在CBuilder4中,如何把已经做好的Form塞入dll中,通过dll使这个form能被exe调用。

我按书上说的先用CBuiler自己带的DLL向导生成一个DLL的框架,
然后New一个Form出来。
改Form的头文件如下:
#ifndef Unit1H
#define Unit1H

#ifdef _DLL_ //1我手工加
#define DLL_EXP _declspec(dllexport) //2我手工加
#else //3我手工加
#define DLL_EXP _declspec(dllimport) //4我手工加
#endif //5我手工加

//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class DLL_EXP TForm1 : public TForm //6我手工在class 与 TForm1 这间加入DLL_EXP
{
__published: // IDE-managed Components
TEdit *Edit1;
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

可是竟然存不了盘!并给出以下提示:
Error in module Unit1:Declaration of class TForm1 is missing
or incorrect.
unit1.cpp文件我没有动。
请问怎么办?
...全文
142 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
potatopro 2000-11-29
  • 打赏
  • 举报
回复
"DLL_EXP"不加在类的声明头上,而加在成员函数的声明前。
nononono 2000-11-29
  • 打赏
  • 举报
回复
按我的理解:
DLL只能提供函数的共享,不能提供数据的直接共享。象“extern PACKAGE TForm1 *Form1”这样的说明,显然是要想提供一个TForm1的对象Form1来共享,应该是不可以的。如果一定要共享一个Form,这个Form对象应该是DLL内部的,通过函数接口提供给使用者。
要实现数据的直接共享,应该用DELPHI/BCB提供的程序包的形式。程序包的作法与DLL是基本一样的,只需将_declspec(dllexport) /_declspec(dllimport) 都写成PACKAGE也就是_declspec(package)。当然,程序包只能用在DELPHI/BCB的程序中。
nononono 2000-11-28
  • 打赏
  • 举报
回复
"extern PACKAGE TForm1 *Form1;"不对。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧