delphi6下的dll,delphi4下不能调用?(50分)

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

samxu

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi6下编译生成的dll,在delphi4下不能正常调用,而在delphi6下可以正常调用。<br>用的是同样的语句。<br>同样,在delphi4下编译生成的dll,在delphi6下也无法正常调用,请问为什么?<br>例:<br>function &nbsp;GetPlayerImage(bmpname:string;Pic :TBitMap): TBitmap; stdcall; external 'player.dll';<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp;GetPlayerImage('ms11',image1.picture.bitmap);<br>end;<br>
 
把string 换成pchar &nbsp;再试试 &nbsp; [?]
 
一样,用delphi4调用后得不到图片,并在程序结束时出现EaccessViolation错误提示,<br>但同样的程序,在delphi6下运行一切ok,可以得到图片?
 
从d4到d6之间,可能TBitmap的结构被修改,已经不同了,所以不能直接访问对方的bitmap对象了
 
在d6和d4分别编译一个程序,程序有下面的语句<br>showmessage(inttostr(TBitmap.InstanceSize));<br>可以看看d6和d4的TBitmap的对象实例是不是一样大<br>不一样大说明肯定变了,一样大的话则不能说明任何问题<br>
 
是的,对象实例不一样大了,我该如何解决??
 
这边传 Bitmap.Handle 过去<br>那边建一个bitmap,把接受到的Handle给给 新Bitmap.Handle
 
能写源码吗?<br>最好不要改动原来的dll
 
dll不改不行,因为d4和d6的TBitmap不同,所以不能直接传递TBitmap,只能传递共同的<br>HBitmap (bmp.Handle)
 
这太令人痛苦了,谢谢Pipi,我原来的dll如下,请问如何改,谢谢!<br>function GetPlayerImage(bmpname:string;Pic :TBitMap):TBitmap;<br>begin<br>&nbsp; Pic.LoadFromResourceName(HInstance,bmpname);<br>end;
 
<br>你要取得dll里面的bmp?用不着调用dll的函数,直接在exe就可以得到了<br>var<br>&nbsp; m:HMODULE;<br>begin<br>m:=GetModuleHandle(你的dll名字);<br>if m=0 then<br>&nbsp; m:=LoadLibrary(你的dll名字);<br>if m=0 then<br>&nbsp; RaiseLastWin32Error;<br>Image1.Picture.Bitmap.LoadFromResourceName(m,你的bitmap资源名字);
 
注意不要freelibrary,免得画蛇添足,不会引起资源泄漏的
 
好酷啊!谢谢你,Pipi!
 

Similar threads

后退
顶部