dll传递image对象或image.canvas的错误(50分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure myinitialize_image(image_rain:Timage);
var
i,m,n:integer;
arrow:array[0..2] of tpoint;
begin
//image初始化。
......
end;
exports myinitialize_image;
end.
出现的错误:can only modify an image if it contains a bitmap
 
又是没头没尾的问题,

begin
//image初始化。
......
end;

贴出上面的代码。
 
昨天的,希望今天还可以。
procedure myinitialize_image(image_rain:timage;max:integer);stdcall;
var
j:integer;
arrow:array[0..2] of tpoint;
bitline:array[0..1] of tpoint;
unit_x,unit_y:double;
begin
with image_rain do
begin
//画纵横坐标
canvas.MoveTo(18,15);
canvas.LineTo(18,height-15);
canvas.LineTo(width-15,height-15);

//画纵横箭头,箭头高为8个像素,宽为10个像素
canvas.Brush.Color:=clgreen;
arrow[0]:=point(13,15);
arrow[1]:=point(23,15);
arrow[2]:=point(18,5);
canvas.Polygon(arrow);
arrow[0]:=point(width-15,height-20);
arrow[1]:=point(width-15,height-10);
arrow[2]:=point(width-5,height-15);
canvas.Polygon(arrow);
canvas.Brush.Color:=clwhite;

//为横坐标注释,24小时*13=312;
//横坐标单位长度为unit_x。
unit_x:=(width-40)/24;
canvas.TextOut(10,height-14,'8:00');
canvas.TextOut(10+trunc(4*unit_x),height-14,'12:00');
bitline[0]:=point(18+trunc(4*unit_x),height-15);
bitline[1]:=point(18+trunc(4*unit_x),height-18);
canvas.Polygon(bitline);
canvas.TextOut(10+trunc(8*unit_x),height-14,'16:00');
bitline[0]:=point(18+trunc(8*unit_x),height-15);
bitline[1]:=point(18+trunc(8*unit_x),height-18);
canvas.Polygon(bitline);
canvas.TextOut(10+trunc(12*unit_x),height-14,'20:00');
bitline[0]:=point(18+trunc(12*unit_x),height-15);
bitline[1]:=point(18+trunc(12*unit_x),height-18);
canvas.Polygon(bitline);
canvas.TextOut(10+trunc(16*unit_x),height-14,'00:00');
bitline[0]:=point(18+trunc(16*unit_x),height-15);
bitline[1]:=point(18+trunc(16*unit_x),height-18);
canvas.Polygon(bitline);
canvas.TextOut(10+trunc(20*unit_x),height-14,'4:00');
bitline[0]:=point(18+trunc(20*unit_x),height-15);
bitline[1]:=point(18+trunc(20*unit_x),height-18);
canvas.Polygon(bitline);
canvas.TextOut(10+trunc(24*unit_x),height-14,'8:00');
bitline[0]:=point(18+trunc(24*unit_x),height-15);
bitline[1]:=point(18+trunc(24*unit_x),height-18);
canvas.Polygon(bitline);
//为纵坐标注释。雨量最大值:330.1mm
//纵坐标单位长度为unit_y。
unit_y:=(height-40)/max;//strtoint(trim(f_rainstat.cbbx_ymax.text));
for j:=1 to round(max/20) do //strtoint(trim(f_rainstat.cbbx_ymax.text))/20) do
begin
canvas.TextOut(0,height-trunc(unit_y*20*j)-20,inttostr(20*j));
bitline[0]:=point(18,height-trunc(20*j*unit_y)-15);
bitline[1]:=point(21,height-trunc(20*j*unit_y)-15);
canvas.Polygon(bitline);
end;
end;
end;
 
procedure myinitialize_image(image_rain:timage;max:integer);stdcall;
var
j:integer;
arrow:array[0..2] of tpoint;
bitline:array[0..1] of tpoint;
unit_x,unit_y:double;
begin
with image_rain.picture.bitmap do
~~~~~~~~~~~~~~~~~~~~~~~~~~ //这里有改动
begin
//画纵横坐标
....................
end;

给分!
 
你的意思是不是按你写的改。
但是还是会出现同样的错误。
怎么办呢?
 
procedure myinitialize_image(image_rain:timage;max:integer);stdcall;
改成
procedure myinitialize_image(var image_rain:timage;max:integer);stdcall;
~~~~~~~~~~~~~~~
试试
再不行,我就没辙了,除非你将所有代码贴出了,我帮你调试
 
要判断canvas存不存在的./
 
还是不行,调用的时候出错。
定义的timage变量老实说类型不统一。
 
xwings:什么意思?能具体点吗?
 
我运行你的程序,没有错!
 
可我就是运行不起来。
 
uses extctrls;
 
究竟是什么错误?
你写出来。
 
一般来说 Timage 组件要初始化bitmap 之后 canvas属性才可以用的. 你可以判断一下.
如果canvas的handle 是0 的话,就说明canvas不存在的.
 
canvas是存在的。
具体错误是:Access violation at address 002473B1 in moudle 'dllname.dll'.
read of address 00000008
 
我知道了,是我的dll有点不是问题的问题,现在改过来了。
谢谢各位。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
976
import
I
I
回复
0
查看
948
import
I
后退
顶部