请问vb的声明如何转换为delphi的声明(100分)

  • 主题发起人 主题发起人 aqi
  • 开始时间 开始时间
A

aqi

Unregistered / Unconfirmed
GUEST, unregistred user!
请问vb的声明如何转换为delphi的声明
VB的声明
Declare Function omrGetDdeData Lib "OmrClien.DLL" (ByVal Buf As String) As Long
其中BUF传出数值
我的做法是,
function omrGetDdeData(var buf:string):integer;
stdcall;
external'OmrClien.DLL';
我查过大富翁以前的数据,只有前面加 var 才能传出数值
但是调用的时候出错(加var),不加var又不能传出数值.
请各位大虾帮忙
 
function omrGetDdeData(buf: Pchar): Integer;
stdcall;
external 'OmrClien.dll';
 
谢谢
基本上可以用了但还有一些小问题不知大家能否指教
请看辕马

var
s:pchar;
d:array[0..100] of char;
h:string;
i:integer;
begin
try
for i:=0 to 99do
h:=h+(' ');
s:=pchar(h)// 一百个空格一切正常,如若空格少一些
//则会引起系统崩溃,不只是何原因,我已经'死'了三次了
omrSendDdeCommand(edit1.text);
omrGetDdeData(s);
finally
edit2.text:=s;
end;
end;
 
那是因为omrgetddedata返回的字符串至少有100字节, 你的循环相当于申请一块内存. 如果内存
大小不足以放下返回值当然会死(dll死了,非法操作错吧?)
顺便说一句, 用下面代码代替您的是不是简洁点?
var
s: Pchar;
begin
omrsendddecommand(edit1.text);
getmem(s, 1024);
// 分配1024字节, 如果不够可以根据情况设置, 总之要能放下所有返回值
omrgetddedata(s);
edit2.text := strpas(s);
freemem(s);
end;
 
to Another_eYes:
对PChar应该用StrAlloc和StrDispose;(null-terminated)
var
P: PChar;
begin
P:=StrAlloc(255);
......
StrDispose(P);
end;
 
delphiwolf, 指定为pchar类型只是因为pchar型可以不用强制类型转换而直接+/-数字, 实际
上还是一个指针, 指向某块内存罢了. 至于内存分配完全可以用您熟悉的或用起来顺手的函数/过
程. 所以没必要那么拘于形式.
 
谢谢大家 给 Another_eYes加70 分 给DELPHIWOLF 加30分
 
多人接受答案了。
 
后退
顶部