在 DLL 中怎么修改 Form.Font

iamduo 2010-09-25 02:55:35
// dll
procedure test(AForm:TForm);stdcall;export;
begin
AForm.Caption := 'test';
ShowMessage('1');
AForm.Font.Charset := GB2312_CHARSET;
AForm.Font.Name := '宋体';
ShowMessage('2');
AForm.Font.Size := 9; // 这里出错

end;


// exe
procedure TForm1.Button1Click(Sender: TObject);
var
hh:THandle;
proc:procedure (AForm:TForm);stdcall;
begin
hh := LoadLibrary('D:\DuoEditor\Bin\Form.dll');
@proc := GetProcAddress(hh,'test');
proc(Self);
FreeLibrary(hh);
end;

请问谁知道,怎么处理?
奇怪的是 AForm.Font.Name 都修改成功了。
为什么 size 不行?
不用 ShareMM。
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamduo 2010-09-25
  • 打赏
  • 举报
回复
TK,你的消息收到。
看看我给你留的QQ 。
确实是带包的问题。
不过没有用 MM 就解决了。
谢谢,大家。
Rivera_Biti 2010-09-25
  • 打赏
  • 举报
回复
带包带包......

或者麻烦一点,把TForm封个接口扔出去也可以
dinoalex 2010-09-25
  • 打赏
  • 举报
回复
利用消息
ccrun.com 2010-09-25
  • 打赏
  • 举报
回复
带包编译。
use sharemem
wxieyang 2010-09-25
  • 打赏
  • 举报
回复
在dll和exe之间,如果不是带包编译,很多东西都是两套(比如Application就是两个),其中就有管理字体的FontManager,即使你上面的代码设置不出错误,早晚也会出问题(比如你卸载dll的时候)

所以,如果你一定要在dll中操作exe中的相关资源,还是采用带包的方式编译吧。

你能在设置字体大小的时候报错,这说明你运气好,如果你运气不好,他不会在你调用函数的时候报错,而可能在莫名其妙的地方出现错误,那时候找起来才叫头痛呢。
wxieyang 2010-09-25
  • 打赏
  • 举报
回复
你把dll和exe都采用带包的方式编译试试看

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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