写了一个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);
这样处理一下就能解决这个问题,但究竟是什么原因呢?
按照上面的方法修改了代码,编译运行,进行数据库操作时,弹出ADOConnection登录验证输入用户名和密码的小窗口