DELPHI 如何声明 VC 里输出的函数? 在线等待(100分)

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

cqbaobao

Unregistered / Unconfirmed
GUEST, unregistred user!
VC 写的 DLL 里的如下函数,如何在 DELPHI 里声明:<br>AFX_EXT_API void GetRendedBmp( BITMAP&amp; bmpBg, &nbsp;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BITMAP&amp; bmpFg,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BITMAP&amp; bmpHuman,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BITMAP&amp; bmpFont,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BITMAP&amp; bmpOutput);<br>我是:<br><br>procedure GetRendedBmp(bmpBg, bmpFg, bmpHuman, bmpFont, bmpOutput: Bitmap);<br><br>implementation<br><br>procedure GetRendedBmp; external 'Rend.dll' name 'GetRendedBmp';<br><br>这样提示"不存在的输出 REND.DLL:GetRendedBmp"<br><br>
 
该函数可能没有通过命名输出,你需要通过索引来获得,<br>如<br>procedure GetRendedBmp; external 'Rend.dll' index xxx;<br><br>另外,你的声明也有问题,在动态连接库中该函数是有参数的,而你声明的过程与DLL中的不符<br>你应当声明一个与DLL中该函数形参相同的函数来使用.<br>
 
谢谢 only you :)<br><br>按照你说的修改后,程序可以运行了。<br><br>另外 :<br>那个 BITMAP 这个类型在 DELPHI 里也叫 BITMAP, <br>但 VC 里的 BITMAP&amp; 在 DELPHI 里应该叫什么呢?
 
你可以宣告為 PBitmap 或改成<br>procedure GetRendedBmp(var bmpBg, bmpFg, bmpHuman, bmpFont, bmpOutput: Bitmap);<br>
 
呵呵,不好意思,还有个问题, 都放到一起问吧,分不够我再加<br><br>这个 bitmap 结构里的 bmBits 字段 能否通过 Graphics.pas 里定义的那个 TBitmap 类来得到?<br>如何做?
 
你可調用API CreateBitmapIndirect 將Bitmap結構傳入, 它會傳回一個Bitmap的Handle<br>將此Handle設定給TBitmap類的Handle, 就可以該TBitmap來顯示了<br>你所指的如果是要直接取用bmBits的內容, 則可以透過以下方式<br>type<br>&nbsp; TByteArray = array[0..0] of byte;<br><br><br>&nbsp; TByteArray(bmBits^)[0] &nbsp; &nbsp; //bmBits的第一個byte<br>&nbsp; TByteArray(bmBits^)[1] &nbsp; &nbsp; //bmBits的第二個byte
 
谢谢 lorderic 的耐心指导, 可能你理解反了<br><br>以下代码为例,我的意思是:<br><br>var<br>&nbsp; bmp: TBitmap;<br>&nbsp; info: Bitmap;<br>begin<br>&nbsp; bmp := TBitmap.Create;<br>&nbsp; bmp.LoadFromFile('1.bmp');<br>&nbsp; <br>&nbsp; info.bmBits := ? &nbsp;// 我想由 bmp 得到 info 的该字段<br><br>&nbsp; bmp.Free;<br>
 
要直接存取是沒有辦法的, 因為在Tbitmap中, 那是private的屬性<br>不過可以透過 API 取得<br>GetObject(bmp.Handle, SizeOf(info), @Info);<br>
 
Delphi技巧库里有
 
lorderic: <br>&nbsp; 非常感谢你!<br>&nbsp; BTW: 你在台湾吗?<br><br>programsky:<br>&nbsp; 那个东西哪里有?
 
可从http://www.pcbookcn.com/ <br>下载
 
不我在厦門工作
 
还愿来了:)<br><br>看了各位的答案,我觉得分太少了,<br><br>因此 lorderic 请到下面拿分吧:<br><br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1061890
 
后退
顶部