在Dll中使用数据库的问题

数字蛋糕 2001-06-10 06:50:00
因为我准备实现一个复杂查询的插件系统(因为在查询中有的字段内容并不是从某一个Field中简单复制出来的),所以准备在主程序中连接好数据库(我使用TIBDatabase)和Transaction,然后在Dll中动态建立Dataset(Table或者Query),然后将动态创建的Dataset的相关属性用主程序中的数据库控件填上。然后在Dll中处理数据并输出结果(字符串)。
可是问题是,我在Dll中无法打开创建的数据集,而且也不知道应该怎么调试Dll。
另外也不知道这种在Dll动态调用时传递对象方法是不是正确的。照说Dll与Exe共享地址空间,有没有可能向Dll传递对象呢?

哪位高手指点一下,重重有分。
...全文
114 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
数字蛋糕 2001-06-16
  • 打赏
  • 举报
回复
补充一下,免得误导察看此文章的人。
因为不需要建立对象的副本,传递指针的时候并不需要指出大小等信息,也不需要Move,Copy等函数的辅助。只是在Dll中直接将指针指向的值付给对象变量就行了。
例如:Obj:=PObj^;//轻松搞定
数字蛋糕 2001-06-16
  • 打赏
  • 举报
回复
谢谢大家,我原来的调用错误的原因已经找到了,Dll的调试模式也已经解决。
传递指针的办法挺好。只是不知道为什么不能直接传对象……

不管怎么说,分数奉上:)
pipai 2001-06-12
  • 打赏
  • 举报
回复
1、调试:dll工程文件的compiler options中设置所有debug属性,然后build, 设置好端点;在dll工程的Run-->parameters中Host Application处填写调用者,最好把它copy到工程文件的目录中,以免它错误的调用其他地方同名dll,根据你的需要设置parameters,然后Load,如果该Host文件不包含调试信息,则会出来CPU窗口,没关系,继续按F9(RUN),执行调用该DLL的功能部分,如果有端点,则会停在端点处

2、由于你传递了使用string类型的对象(指针),可能必须在你的工程文件入口unit中Uses Sharemem;并且sharemem放在units的第一个,否则程序会出错,这是我的理解,没有验证,不知是否如此
airhorse 2001-06-12
  • 打赏
  • 举报
回复
应该可以向Dll传递对象,
airhorse 2001-06-12
  • 打赏
  • 举报
回复
可以向Dll传递对象,
数字蛋糕 2001-06-12
  • 打赏
  • 举报
回复
关于调试Dll还是有问题。我按照这样的设定了以后,还是无法在断点处停下,而且Dll出了Delphi异常也不会主动中断它,而是直接在Host程序中报错……

555555~~~~~~~~~~~
Crob 2001-06-10
  • 打赏
  • 举报
回复
调试DLL时在选择Run菜单下的Parameters

在出现在对话框中设置Host Application,按ok,不要按load,然后就可以像调试其它项目一样来调试dll了。可以随意设置断点,添加watch list等。

要在Dll与exe间共享地址空间,可以从exe传指针参数给dll,指针可以指向任何东西,只要两端数据结构一样就可以了,当然要将指针大小一样传过去

crob@263.net

Crob 2001-06-10
  • 打赏
  • 举报
回复
我指的大小是指针指向的数据的大小,Dll接到指针后怎么还原里面的数据呢?
看看AllocMem、StrAlloc、move、copy等指针相关的函数
数字蛋糕 2001-06-10
  • 打赏
  • 举报
回复
谢谢帅哥的回答。不过我还有一些东西不清楚。

但是Object Pascal中的对象的概念实际上不就应该是指针吗?
另外,你所指的指针大小是什么呢?Win32下的指针不都是32位的吗?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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