VC++中的char** 类型变量,在delphi中如何读取?(急,在线等待。分不够解决后再加) (50分)

  • 主题发起人 主题发起人 yostgxf
  • 开始时间 开始时间
Y

yostgxf

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要读取用VC++做的DLL库函数中值,在VC++中函数的定义如下:
int MgsGetIDByType(char** JbID ,int JbType);
输入参数:
JbType 符号类型
输出参数
JbID 符号标识数组(num*100*sizeof(char))
返回值:符合查询条件的符号数目。
问题是char** JbID 在delphi中如何定义?
1.函数类怎么定义? TMgsGetIDByType = function(var JbIDs: ???;
JbType: integer): integer;
Cdecl;
2.在调用函数时变量怎么定义var JbIDs:???,如何取出来?
希望大家帮忙,谢谢!最好详细一点。
 
type
PPChar = ^PChar;
TMgsGetIDByType = function(var JbIDs: PPChar;
JbType: integer): integer;
Cdecl;
var JbIDs: PPChar;
GetMem(JbIDs, num);
for i := 0 to num - 1do
GetMem(JbIDs, 100);
n := GetIDByType(@JbIDs, JbType);
 
谢谢,你的方法编译没法通过,是JbIDs的问题。
通过其他的人帮忙,我现在是把数取出来了,但总感觉是凑出来的,大家看看代码能否优化一下:
type PPChar = array of PChar;
TMgsGetIDByType = function(JbIDs: PPChar;
JbType: integer): integer;
Cdecl;
setLength(JbIDs, num);
for i := 0 to num - 1do
GetMem(JbIDs, 100);
n:=GetIDByType(@JbIDs[0], JbType);
 
TMgsGetIDByType = function(var JbIDs: PChar;
JbType: integer): integer;
Cdecl;
 
char** JbID
对应的是个指针.
我一般用 var buf:array [0..1024] of char;
@buf[0],就可以对应 jbid了..
当然也可以动态的分配内存了..
 
to zhj_nc:你的定义不行的。
谢谢itren,我的内存可能会超过1024。
 
COM里面就有这样的声明,比如:
WINOLEAPI StringFromCLSID(REFCLSID rclsid, LPOLESTR * ppsz);
在Delphi里面的声明就是
function StringFromCLSID(const clsid: TCLSID;
out psz: POleStr): HResult;
stdcall;
 
谢谢大家!
 
多人接受答案了。
 
后退
顶部