如何解决传递带有“const”的 DLL 函数参数是否等效于指针?
数据块:
PMyDataBlock = ^MyDataBlock;
MyDataBlock = record
// .............
end;
是以下定义:
function MyFunction(const pstSettings: MyDataBlock): HRESULT; stdcall; external 'MyLib.dll' name 'MyFunction';
完全等同于这个?:
function MyFunction(pstSettings: PMyDataBlock): HRESULT; stdcall; external 'MyLib.dll' name 'MyFunction';
解决方法
简短的回答是“不,不是”
就您而言,您的记录可能会或可能不会通过引用传递。记录的大小是我所知道的影响该行为的因素的 1。如果你的记录是4个字节或更少,我相信它会通过值传递,否则它将通过引用传递。我不相信这种行为是契约性的(换句话说,Embarcadero 可以在未来的任何时候自由地改变它)。换句话说,使用 const 参数来调用外部函数是一个坏主意。
如果您想通过引用传递您的记录,正确的做法是声明它var
function MyFunction(var pstSettings: MyDataBlock): HRESULT; stdcall; external 'MyLib.dll' name 'MyFunction';
或将其作为指针传递。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。