你好,请教一个问题,delphi如何调用DLL中的一个带动态数组参数的方法?

我定义的结构体:TFieldInfo=recordFileName:PChar;DisplayText:PChar;NotNull:Boolean;end;TFieldI... 我定义的结构体:
TFieldInfo = record
FileName: PChar;
DisplayText: PChar;
NotNull: Boolean;
end;

TFieldInfos = array of TFieldInfo;

DLL(自己用delphi写的)中的函数需要传递一个动态数组:
函数声明如:
function ImportData(AFieldInfo: array of TFieldInfo): Boolean;
或:function ImportData(AFieldInfo: TFieldInfos): Boolean;

应该如何调用?如果该方法不是在DLL中封装,调用没有问题,但如果封装到DLL中,调用报地址错误。

另外,还有一个疑问,见链接:http://user.qzone.qq.com/303163222/infocenter#!app=2&via=QZ.HashRefresh&pos=1339581464
展开
 我来答
TDelphi
2013-04-03 · 超过23用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:70.2万
展开全部
应该是DLL和EXE都引用ShareMem就可以了

另外在你空间回答了
追问
我传的参数没有敢用string,还需要引用ShareMem单元吗?调用DLL中的带数组参数的方法是不是必须用数组指针?
我空间里的回答我觉得解释的通。之前好像在网上下载过你的某一个小程序,忘了名字了。
追答
如果DLL参数是动态数组可能是需要ShareMem,我没这样用过。只是印象中这样。

另外关于字符串你可以看《Delphi源代码分析》这本书,里面提到的string的格式。
是: 引用计数 + 串长 + 字符串内容
而字符串变量本身是一个指针(4字节),是字符串内容的首地址 (引用计数和串长可以通过此地址-4、 -8得到)
来自:求助得到的回答
RedBaronVIP
2013-04-06 · TA获得超过1147个赞
知道小有建树答主
回答量:655
采纳率:0%
帮助的人:244万
展开全部
个人一点建议,你觉得有理就试试,否则就当我没说:
1、凡是写dll,尽量不要把Delphi的string和动态数组作为参数传递,因为这些玩意都是Delphi的独门类型(含有计数引用、长度等额外的狗屎东西),Windows认识你Delphi老大贵姓?Windows API哪个含有动态类型的参数?全用的指针!
2、动态数组变量本身就是个指针,直接使用它本来面目进行传递。这样改函数:
function ImportData(FieldInfosPtr: Pointer): Boolean;
var
AFieldInfo: TFieldInfos;
begin
AFieldInfo := FieldInfosPtr;
其它部分不变...
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sirouszlh
2013-04-04 · TA获得超过1651个赞
知道小有建树答主
回答量:1038
采纳率:100%
帮助的人:645万
展开全部
var
fieldInfo:TFieldInfo;
调用:
ImportData( @fieldInfo);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式