DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 1
在线用户: 3
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 starxzj (st) ★☆☆☆☆ -
普通会员
2019/12/8 1:15:40
标题:
如何获取DLL中的值 浏览:709
加入我的收藏
楼主: 声明动态库中函数get_st
function get_st(ie: longint;Pta:pansichar):smallint;

程序中使用get_st
st:=0;
res:=get_st(ie,@st); 


在动态库中get_st应该怎样才能让程序中调用的时候返回st=1;
function get_status(ic: longint; Pta: PAnsiChar):smallint;stdcall;        
var
  statui : smallint;
begin
    statui:= 1;
    status := @statui;   //这样写在主程序中得不到1;应该如何写?
    Result :=0;
end;
----------------------------------------------
-
作者:
男 starxzj (st) ★☆☆☆☆ -
普通会员
2019/12/8 10:42:13
1楼: 或者这样说更容易理解些:
function getfun(id: longint; st: PAnsiChar):smallint;stdcall;     //函数参数声明不能改变
var
  res:Integer;
  statusint:Integer;
begin
    statusint := 200;
    st := @statusint;     //怎样写才能在下面的调用中得到200这个值,现在这样写不行
    Result :=0;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  stlab,resint:Integer;
begin
  stlab := 0;
  resint :=  getfun(100,@stlab);        //调用方式不能改变
  Edit1.Text := IntToStr(stlab);        //stlab要求得到200;
end;
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/12/8 11:54:38
2楼: st := @statusint;     //怎样写才能在下面的调用中得到200这个值,现在这样写不行
===>
pinteger(st)^ := 200;

既然st要兼容任意类型,为什么一定要pansichar类型?这个架构师是不是有点皮啊?

如果只是一个现有的插件系统需要兼容旧有的dll,那么定义成out int、pint都没问题,为什么你一定要纠结pansichar?炫技嘛??
----------------------------------------------
--
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行60.54688毫秒 RSS