怎么在DLL中写一个窗体,让其他模块调用

如何在DLL中写一个窗体,让其他模块调用?
我想在DLL中写一个公用的查询窗体,让其他模块调用,请问

1,在DLL中的窗体如何写
2,其他模块如何来调用

我用的是DELPHI7
这里先谢谢大家!

------解决方案--------------------

1.函数返回string类型时:
动态库工程引用的第一个单元必须是sharemem;
应用程序工程文件中第一个引用单元必须是sharemem;
发布应用程序时,必须把borlandmem.dll一起发布;
建议:使用字符串指针类(PChar)型作为返回类型;PCHAR是WINDOWS的标准数据类型。

2.代码中存在的问题:
function test:string;stdcall;
begin
try
inherited;//这一句没有必要要了。
//frmTEST := TfrmTEST.Create(self);//DLL工程与一般的窗体类型的工程不一样,
//没有SELF指针,DLL只有一个APPLICATION对象,且与调用的应用程序的APPLICATION对象
//是不一样的。在创建动态窗体时,你可以使用NIL就行了。
frmTEST := TfrmTEST.Create(nil);
if frmTEST.ShowModal=mrok then
Result := frmTEST.str;//函数返回的控制应当放在这儿。
//放在最后肯定会报内存访问错的。因为try finally end 结构中,会先释放窗体,再访问窗体对象时,这个对象不存在了!
finally
frmTEST.Free;
end;

end;