如何调用 DLL 和得到想要的结果(50分)

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

question

Unregistered / Unconfirmed
GUEST, unregistred user!
如何调用 DLL 和得到想要的结果。<br>有一个用 C++ 写的 DLL 原说明书中写的调用为<br>DllDecl int TEST_NO1(int station ,int userno,char *GrayImageBuf)<br><br>该函数需要输入 station 和 userno 后返回一个灰度的 GIF 图象格式文件<br>内容到 GrayImageBuf 缓存中。<br><br>这个函数在 Delphi 4 中要如何声明?假设该函数包含在一个 TTT.DLL 文件中。<br>任何将获得的 GrayImageBuf 内容保存到一个GIF 文件中?<br><br>Thank you!
 
function TEST_NO1(station,userno:Integer;GrayImageBuf:PChar):Integer;stdcall;external 'TTT.DLL' name 'TEST_NO1';<br><br>如果是真正的C++函数,可能最后的'TEST_NO1'要作修改.但一般都不用的.
 
这样不对,
 
这样不对,
 
我感觉应该写成这样的申明会更好<br>function TEST_NO1 station,userno:Integer;GrayImageBuf:Pointer):Integer;stdcall;external 'TTT.DLL' name 'TEST_NO1';<br><br>可我要如何设置和获得 GrayImageBuf 呢?我的最终目的是将这段缓存包存到一个<br>文件中(如 aa.gif)<br><br>另: 如何用Delphi 获取一个 Sql Server 中二进制字段的数据,不使用流。及<br>Delphi 中有无二进制的类型,如在 PowerBuild 中有 selectblob 获得一个二<br>进制的数据。(另给 20 分)<br><br>
 
究竟是甚麽样的错误,总得先说一下吧?<br><br>我怀疑问题主要是C++的问题。您的写法没有本质区别。<br><br>GrayImageBuf是预先申请的一个缓冲区,而返回(设为len)值应该就是<br>长度。调用TEST_NO1后将GrayImageBuf中的前len个字节写入文件就可<br>以了。<br><br>BTW:我不懂数据库。
 
出现写保护性错误!
 
1.你给GrayImageBuf分配内存了吗?<br>2.这应该是一系列函数中的一个,你调用了必要的前导函数了吗?<br>3.这如果是一个真正的C++函数,那么参数的压栈顺序是反的,一个写为:<br>function TEST_NO1(GrayImageBuf:PChar;userno,station:Integer):Integer;stdcall;external 'TTT.DLL' name 'TEST_NO1';
 
Faint, Function is good
 
Sorry ,我的意思是函数不需要反过来写。
 
Sorry ,我的意思是函数不需要反过来写。
 
我并没有说函数参数一定要反过来写.<br>其它两个原因才是比较可能的.你检查过了吗?
 
Sigh,无法解决,感谢您。
 
Sigh,无法解决,感谢您。
 
后退
顶部