我遇到一个这样的问题:

TIYILON 2001-06-09 07:18:00
有一个dll,里面做一些耗时操作,需要一个进度条显示进度。
如果用vc调用的话,应该可以直接传CProgressCtrl.
但是现在我是用delphi调用这个库文件,除了int还能传什么?
但是vcl的ProgressBar不能将Position属性按址传递

即:函数原型:long test(long *p){}
delphi :
-----------------------------------------------
longint test(longint *p){}
此时:test(ProgressBar.Position);
提示不能传属性

解决方法可以用send Message来实现?即delphi钩住一个消息。
dll每次需要写进度的时候,将进度当做消息参数发送给应用程序,
应用程序捕捉消息,取得消息参数的值。不知是否可行?
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
windindance 2001-06-10
  • 打赏
  • 举报
回复
n:= ProgressBar1.Position;
test(@n);
ProgressBar1.Position := n;
……………………………………
showmessage(inttostr(ProgressBar1.Position));
TIYILON 2001-06-09
  • 打赏
  • 举报
回复
vc++
----------------------------------
long _stdcall Test(long *p)
{
*p = 20 ;
return 1;
}
----------------------------------
delphi
---------------------------------
function Test(n : Pointer):longint; StdCall; external 'test2.dll';

procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
n:= ProgressBar1.Position;
test(@n);
showmessage(inttostr(ProgressBar1.Position));
nd;

结果发现好像根本没有赋值阿。。progressBar1的position还是0
TIYILON 2001-06-09
  • 打赏
  • 举报
回复
那么delphi引用long test(long *p){}

的时候怎么声明函数?
function Test(var n :longint):longint;
不行阿。。
是传指针么?
windindance 2001-06-09
  • 打赏
  • 举报
回复
不需要呀。
var n:integer;
n:= ProgressBar.Position;
test(@n);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧