请 帮解答 ( 积分: 100 )

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

2843223

Unregistered / Unconfirmed
GUEST, unregistred user!
说明<br>C++<br>int&nbsp;srd_4442(int&nbsp;icdev,&nbsp;int&nbsp;offset,&nbsp;int&nbsp;len,&nbsp;unsigned&nbsp;char*&nbsp;r_string&nbsp;)<br>原函数&nbsp;说明icdev&nbsp;驱动句柄&nbsp;offset&nbsp;起始位置&nbsp;len长度&nbsp;&nbsp;r_string&nbsp;读出字符<br>delphi<br>srd_4442(icdev,offset,len:integer;&nbsp;databuff&nbsp;:&nbsp;pchar):integer<br><br>问题<br>(1)&nbsp;databuff&nbsp;跟&nbsp;&nbsp;*&nbsp;r_string&nbsp;都是读取数据&nbsp;databuff&nbsp;没有加上&nbsp;var&nbsp;按理说&nbsp;不能得到<br>返回值。但是我做了实验的确得到了。&nbsp;*&nbsp;r_string是正确的。<br>(2)&nbsp;如果&nbsp;我用delphi&nbsp;编srd_4442(icdev,offset,len:integer;&nbsp;databuff&nbsp;:&nbsp;pchar):integer&nbsp;函数,怎么在函数中&nbsp;设置&nbsp;databuff参数
 
1&nbsp;在用一个简单类型做为参数并且要通过这个简单类型返回值的时候,需要指定var,其实就是传地址,而Pchar就是个指针,所以不用指定var一样可以返回修改值,就像参数中的复杂对象,传的就是指针,你有见过&nbsp;var&nbsp;o:&nbsp;TObject&nbsp;&nbsp;这样写的参数吗?因为指定var这个时候已经多余了。<br>2&nbsp;可以用GetMem,allocMem&nbsp;函数申请空间,然后赋值即可
 
hanpengshan_00<br><br>我已经做过试验,&nbsp;如果&nbsp;<br>在调用srd_4442(icdev,offset,len:integer;&nbsp;databuff&nbsp;:&nbsp;pchar):integer&nbsp;函数时<br>不声明&nbsp;var&nbsp;databuff&nbsp;:pchar&nbsp;&nbsp;,,databuff不会得到数据的。。<br>delphi&nbsp;不象&nbsp;c++&nbsp;用指针传值。
 
呵呵&nbsp;回答的好啊,楼主你也要自己动手分析一下!基础知识要牢才行。<br>srd_4442(icdev,offset,len:integer;&nbsp;databuff&nbsp;:&nbsp;pchar):integer<br>这个函数说的多明白&nbsp;databuff&nbsp;没有放到返回值里就说明&nbsp;调用以后databuff&nbsp;里面的数据是可以保存的,也就从侧面验证了pchar是指针的道理,好好看看delphi的类型说明吧,你后面的问题就更离谱了,上面跟你说了Pchar相当于指针&nbsp;你没有开辟一块内存当然没地方放了,好好看看delphi的类型说明吧
 
在调用srd_4442(icdev,offset,len:integer;&nbsp;&nbsp;:&nbsp;pchar):integer&nbsp;函数时<br>不声明&nbsp;var&nbsp;databuff&nbsp;:pchar&nbsp;&nbsp;,,databuff不会得到数据<br><br>是你函数内部访问Databuff有问题
 
我已经找到答案了<br>&nbsp;先说明&nbsp;srd_4442&nbsp;为一个dll文件的函数<br>那么就是声明的问题<br>如果是srd_4442(icdev,offset,len:integer;&nbsp;databuff&nbsp;:&nbsp;pchar):integer<br>则&nbsp;调用时&nbsp;要&nbsp;srd_4442(a,b,c,注意@d);<br>如果是srd_4442(icdev,offset,len:integer;&nbsp;var&nbsp;databuff&nbsp;:&nbsp;pchar):integer<br>则&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要&nbsp;srd_4442(a,b,c,注意d);<br><br>其实&nbsp;srd_4442&nbsp;不管是什么编译器边的&nbsp;dll文件&nbsp;databuff都是变量,也就是在数据区<br>的数据。。谢谢大家
 
多人接受答案了。
 
后退
顶部