DLL中报'Cannot assign a TFont to a TFont'的问题

在DLL中使用ADO控件操作数据库时遇到'Cannot assign a TFont to a TFont'错误。问题源于DLL与宿主程序的Application对象混淆。通过传递并替换Application.Handle及MainForm解决了此问题。设置ADOConnection.LoginPrompt为False后,不再需要上述代码,也能正常执行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写了一个DLL,在DLL中创建了一个窗口,并使用的ADO控件操作数据库。宿主程序初始化DLL和显示DLL窗口都没有问题,但是在执行DLL窗口中数据库操作时就会报'Cannot assign a TFont to a TFont'这样一个错误。网上搜索了一下,找到了一个解决方法,如下:

 

主要是由于在创建Dll的Form时,将外部调用程序的Application、Screen和MainForm都传给了Dll并且将Dll中的这几个对象都替换掉了的缘故,解决的办法是只需将外部调用程序的Application.Handle及MainForm传给Dll并替换掉Dll中的这两项值就可以了。如:  
  var      
  p:   PLongInt;  
   
  {DllApp:   TApplication   Dll中的Application  
    OutApp:   TApplication   外部调用程序的Application  
  }  
  p:=@(DllApp.MainForm);  
  DllApp.Handle   :=   OutApp.Handle;  
  p^:=LongInt(OutApp.MainForm);  

 

这样处理一下就能解决这个问题,但究竟是什么原因呢?

 

按照上面的方法修改了代码,编译运行,进行数据库操作时,弹出ADOConne

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值