在DLL里面的函数的参数能用类似于TBitmap的类型吗?
如果不可以,有没有替代的方法?
如果不可以,有没有替代的方法?
解决方案 »
- 线程里动态创建的空间,挂起又恢复时是否需要重新创建?恢复时可否为线程重新传参数?高手帮忙啊
- indy10 TCPSERVER取不到客户端IP地址
- SQL查詢
- FASTREPORT2.5.3重新安装了一下为什么老报错FR_CLASS.DCU找不到?????????谢谢
- delphi中象qq中的分组按纽怎么做的,有什么控件吗?
- 请教如何将数据结果转化为TXT文件?
- QQ窗体控件,那里有,如果有的话,给我一些,谢谢啊!!立刻给分
- 请问如何让listview控件显示treeview控件所点击的内容?
- 大富翁离线资料下载(截止2001-11-23)
- 请问pascal得最好得教材?最好带面向对象得
- 问一个动态创建控件的问题??
- 关于在ADO中取消新增行的问题
TO:linzhengqun(风)
没用过别的,是不是没有这个类啊?
当然了,如果想你的DLL能用各种语言都能调用,
最好不要用某一种语言中特性的数据类型,
最好用与C语言兼容的数据类型来开发,如果是复杂的数据,
最好就定义结构体参数。
不在DLL里面这个过程就是正确的.好奇怪
procedure DrawBmp(Bmp:TBitmap);stdcall;External 'Project2.dll';
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var bmp:TBitmap;
begin
bmp:=TBitmap.Create;
bmp.Width:=100;
bmp.Height:=100;
try
DrawBmp(bmp);
Image1.Picture.Bitmap.Assign(bmp);
finally
bmp.Free;
end;
end;
下面的DLL中的实现
library Project2;
uses
SysUtils, Graphics,
Classes;{$R *.res}
procedure DrawBmp(Bmp:TBitmap);stdcall;
begin
bmp.Canvas.Rectangle(0,0,20,20);
end;
exports
DrawBmp;begin
end.
不在DLL里面这个过程就是正确的.好奇怪
你肯定是先没有实例化先create一下
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
ExtCtrls,
Clipbrd;
procedure RotateImage90(Bitmap:TBitmap);stdcall;
var x,y : Integer;
TmpBitMap : TBitmap;
begin
TmpBitMap := TBitmap.Create();
try
TmpBitMap.Assign(Bitmap);
with Bitmap do begin
Height := TmpBitMap.Width;
Width := TmpBitMap.Height;
for x:=0 to Width do
for y:=0 to Height do
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
Height := TmpBitMap.Width;
Width := TmpBitMap.Height;
end;
finally
TmpBitMap.Free;
end;
end;exports
RotateImage90;begin
end.这就是我的DLL。看不出哪里有错误
ShareMem,
然后是其它的Unit;同样,在你的主程序( xxx.dpr -> view source )中的uses中也一样,加上ShareMem,记住,必须放在第一个位置.
var
x,y : Integer;
Color: TColor;
begin
with Bitmap do begin
for x:=0 to Width do
for y:=0 to Height do
begin
Coloe := Canvas.Pixels[x,y];
Canvas.Pixels[x,y] := Canvas.Pixels[Height-x,y];
Canvas.Pixels[Height-x,y] := Color;
end;
end;
end; 楼主的代码改成这样如何?
用COPYRECT?
能写出代码吗?
procedure RotateImage90(Bitmap:TBitmap);stdcall;
var x,y : Integer;
TmpBitMap : TBitmap;
begin
TmpBitMap := TBitmap.Create();
try
with Bitmap do begin
TmpBitMap.Width:=Bitmap.Width;
TmpBitMap.Height:=Bitmap.Height;
for x:=0 to Width do
for y:=0 to Height do
TmpBitMap.Canvas.Pixels[x,y]:=Canvas.Pixels[x,y];
end;
with Bitmap do begin
Height := TmpBitMap.Width;
Width := TmpBitMap.Height;
for x:=0 to Width do
for y:=0 to Height do
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
Height := TmpBitMap.Width;
Width := TmpBitMap.Height;
end;
finally
TmpBitMap.Free;
end;
end;
以前的错误没有了,运行了正确,不过退出程序时,出现下面的错误,为什么啊?
Invalid pointer operation
procedure RotateImage90(Bitmap:TBitmap);stdcall;
var x,y : Integer;
TmpBitMap : TBitmap;
begin
TmpBitMap := TBitmap.Create();
try
with Bitmap do
begin
TmpBitMap.Width := Width;
TmpBitMap.Height := Height;
TmpBitMap.Canvas.CopyRect(Canvas.Handle, 0, 0, Width, Height);
end;
with Bitmap do begin
Height := TmpBitMap.Width;
Width := TmpBitMap.Height;
for x:=0 to Width do
for y:=0 to Height do
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
end;
finally
TmpBitMap.Free;
end;
end;