Build with runtime packets就好的,去掉就不行了,高手请进!

yesry 2003-02-20 09:09:58
一个DLL,在 Project Options->Packets中,Build with runtime packets勾上就可以通过了,去掉勾救灾连接的时候TForm::Application,DBClient::First()等都Unresolved.怎么解决?
我在DLL中用到new TClientDataSet(Application)的xml存储功能。BCB6。

#include <DBClient.hpp>
extern "C"
__declspec(dllexport) bool WINAPI CreateDatabase(char *file_name)
{
TFieldDefs *pDefs=cdDatabase->FieldDefs;

TFieldDef *pDef=pDefs->AddFieldDef();
pDef->DataType=ftString;
pDef->Size=64;
pDef->Name="TableName";

pDef=pDefs->AddFieldDef();
pDef->DataType=ftString;
pDef->Size=255;
pDef->Name="TableDescript";

pDef=pDefs->AddFieldDef();
pDef->DataType=ftMemo;
pDef->Name="TableData";

TIndexDef *pIDef=cdDatabase->IndexDefs->AddIndexDef();
pIDef->Fields="TableName";
pIDef->Name="Index_TableName";

try{
cdDatabase->CreateDataSet();
TFileStream *strm=new TFileStream(file_name,fmCreate);
cdDatabase->SaveToStream(strm,dfXMLUTF8);
cdDatabase->Close();
delete strm;
}catch(...){return false;}
return true;
}
//-----------------------------------------------------------------------

...全文
40 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesry 2003-02-28
  • 打赏
  • 举报
回复
我已经给 cker(〖烟波浩淼三千里、人鬼殊途五百年〗) 190分了,
cker(〖烟波浩淼三千里、人鬼殊途五百年〗) 说说这是什么原因,我可以在给分!

哪位高手说说啊?
  • 打赏
  • 举报
回复
其实也没什么,主要是没有ilinker32没能正确地连接相关的入口库。

#include <vcl.h>
#include <windows.h>
#include <DBClient.hpp>
#pragma hdrstop
//added by cker
#pragma link"dbrtl.lib"
#pragma link"dsnap.lib"
//added by cker

#pragma argsused
这样手动加上也可以。。。。:)
yesry 2003-02-25
  • 打赏
  • 举报
回复
试试看。
  • 打赏
  • 举报
回复
在你的DLL工程中,新建一个DataModule,拉一个ClientDataSet上去,重新Build就没问题了。
关键是现在你在Project Mannager中删除这个Unit,好像也没有问题了....:)
yesry 2003-02-21
  • 打赏
  • 举报
回复
继续郁闷ing...............
http://expert.csdn.net/Expert/topic/1446/1446999.xml?temp=.9971887
Behard 2003-02-20
  • 打赏
  • 举报
回复
可能是 Dll 的 Application 的 Bug
因为在 BCB 中,Dll 也有 Application 的,但好像与一般应用程序的有点区别
可以用 NULL 代替的
至于 DBClient::First 为什么不行,我就不清楚了
[我没有 BCB6 ]
yesry 2003-02-20
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1446/1446999.xml?temp=.9971887
whitelion 2003-02-20
  • 打赏
  • 举报
回复
我是说把新建项目中#include....之类的引入头文件的代码加入到你原来的项目中去试试看
yesry 2003-02-20
  • 打赏
  • 举报
回复
普通的project可以通过!
whitelion 2003-02-20
  • 打赏
  • 举报
回复
可能是有一些头文件没有加进去
你建一个普通的project,试着把新建项目的头文件加到你的项目中再编译一下试试
yesry 2003-02-20
  • 打赏
  • 举报
回复
大家应该建一个dll工程,粘贴以下代码试试看:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#include <DBClient.hpp>
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------
TClientDataSet *cdDatabase;
TFileStream *fsDatabase=NULL;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
cdDatabase=new TClientDataSet(Application);
return 1;
}
//---------------------------------------------------------------------------
extern "C"
__declspec(dllexport) bool WINAPI CreateDatabase(char *file_name)
{
TFieldDefs *pDefs=cdDatabase->FieldDefs;

TFieldDef *pDef=pDefs->AddFieldDef();
pDef->DataType=ftString;
pDef->Size=64;
pDef->Name="TableName";

pDef=pDefs->AddFieldDef();
pDef->DataType=ftString;
pDef->Size=255;
pDef->Name="TableDescript";

pDef=pDefs->AddFieldDef();
pDef->DataType=ftMemo;
pDef->Name="TableData";

TIndexDef *pIDef=cdDatabase->IndexDefs->AddIndexDef();
pIDef->Fields="TableName";
pIDef->Name="Index_TableName";

try{
cdDatabase->CreateDataSet();
TFileStream *strm=new TFileStream(file_name,fmCreate);
cdDatabase->SaveToStream(strm,dfXMLUTF8);
cdDatabase->Close();
delete strm;
}catch(...){return false;}
return true;
}
//---------------------------------------------------------------------------
extern "C"
__declspec(dllexport) bool WINAPI OpenDatabase(char *file_name)
{
try{
fsDatabase=new TFileStream(file_name,fmOpenReadWrite);
cdDatabase->LoadFromStream(fsDatabase);
}catch(...){return false;}
return true;
}
//---------------------------------------------------------------------------
extern "C"
__declspec(dllexport) void WINAPI CloseDatabase()
{
fsDatabase->Size=0;
cdDatabase->SaveToStream(fsDatabase,dfXMLUTF8);
delete fsDatabase;
}
//---------------------------------------------------------------------------
extern "C"
__declspec(dllexport) bool WINAPI CreateTable(char *table_name,char *field_names)//
{
return true;
}
//---------------------------------------------------------------------------
extern "C"
__declspec(dllexport) bool WINAPI OpenTable(char *table_name,TClientDataSet *DataSet)
{
return true;
}
//---------------------------------------------------------------------------
yesry 2003-02-20
  • 打赏
  • 举报
回复
200分也没人回答?
下面的是一样的问题:
http://expert.csdn.net/Expert/topic/1446/1446442.xml?temp=.2362787
yesry 2003-02-20
  • 打赏
  • 举报
回复
to whitelion(chinaproject.51.net)
没有第三方控件。
whitelion 2003-02-20
  • 打赏
  • 举报
回复
可能是路径没有设好
你把用到的第三方控件的的路径都添加到项目的path里去就行了

我以前遇到过类似的问题
yesry 2003-02-20
  • 打赏
  • 举报
回复
to yyfzy(singler)
那怎样解决?
书生 2003-02-20
  • 打赏
  • 举报
回复
gz
yyfzy 2003-02-20
  • 打赏
  • 举报
回复
选项Build with runtime packets就是与编译类型有关

选上就不全编译
去掉就是全编译
yesry 2003-02-20
  • 打赏
  • 举报
回复
编译都一样的,只是选项Build with runtime packets勾选与否。
yyfzy 2003-02-20
  • 打赏
  • 举报
回复
是不是编译的问题啊?选上那个选项就不是全编译了。
yesry 2003-02-20
  • 打赏
  • 举报
回复
继续郁闷ing......
http://expert.csdn.net/Expert/topic/1446/1446999.xml?temp=.9971887
加载更多回复(4)

13,825

社区成员

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

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