XE2下的"Cannot assign a TFont to a TFont"
安装了XE2来学习,顺便把以前的一些测试工程拿来试验
今天有了个发现或者说问题。
我有一个测试项目用来测试调用dll中的窗体的,是D7下的项目,我使用了FastMM4来进行内存相关的管理,在dll加载后,调用了一个过程init,把宿主的application和screen传给了dll,然后再调用dll中提供的其它函数,因为测试,我exports出的函数很简单,就是一个showMessage(),我把dll中的窗体调用部分全部移除掉了。这在d7下是工作正常的
procedure test;
begin
showMessage('message in dll');
end;
因为使用了fastmm4,我没有使用带包编译
我在xe2下打开这个项目,编译运行都是正常的(我又专门下载了最新的fastmm4.99),我发现在dll中执行到showmessage('message in dll');时,会报“Cannot assign a TFont to a TFont.”错误
网上关于这个错误的解决大多是传宿主的application和screen过去,还有更进一步的修改graphics和controls里的源码,我此前已经按照这个处理过,在d7下是不会报这个错误的,但在xe2下就会有,
我又作了其它的试验,在dll中不调用showmessage('xxxxx');可以正常工作
dll中showmessage删除,
换成
with tmyform.create(application) do
try
showModal;
finally
free;
end;
窗体弹出正常
我在dll窗体中增加一下按钮,按钮点击事件是
ShowMessage('hell, button message in dll form');
同样会报“Cannot assign a TFont to a TFont.”错误
如果仅仅是
Edit1.Text := 'abc';
则dll窗体中的Edit1.Text是会随之改变的
基本上就是这个现象,似乎d7中的一些东西在xe2中有了很大的变动,因为是测试项目,我只测试了showMessage函数,不知道有没有其它函数有类似现象。
不知道有没有朋友遇到过这种问题,可否指点一下
[解决办法]
不用fastmm好多年,现在我测试有没有内存泄漏,都用XE2自带的。
于工程文件中:
......
begin
ReportMemoryLeaksOnShutdown := True;
Application.Initialize;
......
[解决办法]
调试下DLL呗?跟进ShowMessage源码里看看,到底在哪里出错!
[解决办法]
这错误不是ShowMessage引起的吧
如果是D7有这种错误,应该是对TFont赋值错误,大部分原因是类型不对
FastMM4,Xe2就不清楚了,无代码测试,无从猜想
[解决办法]
这个问题太深奥,从没听说过fastmm
[解决办法]
还有一种可能,就是此TFont非彼TFont。
[解决办法]
之前D7下好像是屏幕传递有问题会这样吧。可以到网上搜一搜。