谢谢net_z的提示。我做了一个DLL,里面有一个Form,Form上有一个Image,我想通过在Exe中把一个TIcon传入DLL中进行显示,代码如下:DLL中的Export过程: type pTIcon = ^TIcon; procedure foo1(pico : pTIcon); begin if not Assigned(DllForm1) then DllForm1 := TDllForm1.Create(Application);// DllForm1.Image1.Picture.Icon.Assign(picon^); // 这一句报错:Cannot assign a TIcon to a TIcon DllForm1.Image1.Canvas.Draw(0, 0, pico^); // 这一句可以把ico中的图像正常显示到DLL中的Form上。 DllForm1.ShowModal; end;Exe中的调用方式: ..... foo1(@ico); .....还望高手释疑。谢谢!
to net_z:Icon指针的声明主程序和动态连接库都有。 to jabmoon(刺月):做这个例子是为了实现以后把DataSet等VCL对象往DLL中传递。你想我能用流吗?
我想你可以把icon申明放到一个单独单元,写一个bpl包,编译以后,让你的dll和exe程序都build with runtime package用这个包,应该可以!试一下吧!
呵呵原来是这个问题呀如下代码 function showdllform(AHandle:thandle;ACaption:TCaption;icon:ticon):longint;stdcall; var i:ticon; begin application.Handle:=Ahandle; form:=tform1.Create(application); i:=icon;<-----------------------------------这里只能用:=而不能用assign form.image1.Canvas.Draw(0, 0, i); result:=longint(form); form.Show; end;
type
pTIcon = ^TIcon;
procedure foo1(pico : pTIcon);
begin
if not Assigned(DllForm1) then
DllForm1 := TDllForm1.Create(Application);// DllForm1.Image1.Picture.Icon.Assign(picon^); // 这一句报错:Cannot assign a TIcon to a TIcon
DllForm1.Image1.Canvas.Draw(0, 0, pico^); // 这一句可以把ico中的图像正常显示到DLL中的Form上。
DllForm1.ShowModal;
end;Exe中的调用方式:
.....
foo1(@ico);
.....还望高手释疑。谢谢!
上面出错的那句我不太理解,为什么可以使用它来绘图,复制一下却不行呢?
to jabmoon(刺月):做这个例子是为了实现以后把DataSet等VCL对象往DLL中传递。你想我能用流吗?
function showdllform(AHandle:thandle;ACaption:TCaption;icon:ticon):longint;stdcall;
var
i:ticon;
begin
application.Handle:=Ahandle;
form:=tform1.Create(application);
i:=icon;<-----------------------------------这里只能用:=而不能用assign
form.image1.Canvas.Draw(0, 0, i);
result:=longint(form);
form.Show;
end;
换成
DllForm1.Image1.Picture.Icon:=pico^;
也可以成功跟踪到assign里发现,好象是pico^丢失了他的类型信息大虾们帮忙分析一下吧
◎使用package
◎use ShareMem unit.HTH
这个贴子我会再加100分,感谢各位的讨论。