数组 – 如何在没有ShareMem Unit的情况下将动态字符串数组传递
发布时间:2020-12-14 04:15:39 所属栏目:Windows 来源:网络整理
导读:我在这个页面上看到动态数组需要ShareMem单元才能正常工作. 但是我想为其他语言编写一个dll. 谁能告诉我如何声明函数及其参数来传递String数组? 如果没有ShareMem,是不是真的不允许这样? var templates : array of WideString;begin SetLength(templates,2
我在这个页面上看到动态数组需要ShareMem单元才能正常工作.
但是我想为其他语言编写一个dll. 谁能告诉我如何声明函数及其参数来传递String数组? 如果没有ShareMem,是不是真的不允许这样? var templates : array of WideString; begin SetLength(templates,2); templates[0] := 'template1'; templates[1] := 'template2'; end DLLFunction(@templates[0]); 感谢帮助!
动态字符串数组已经是PWideChar / PAnsiChar的数组(对于WideString或UnicodeString / AnsiString).
这个动态数组可以像大多数语言一样直接映射,没有内存副本,作为PWideChar / PAnsiChar的数组: 来自来电者: DLLFunction(length(templates),pointer(templates)); 从dll: type TPAnsiCharArray = array[0..MaxInt div SizeOf(PAnsiChar)-1] of PAnsiChar; PPAnsiCharArray = ^TPAnsiCharArray; TPWideCharArray = array[0..MaxInt div SizeOf(PWideChar)-1] of PWideChar; PPWideCharArray = ^TPWideCharArray; procedure DLLFunction(argc: integer; argv: PPWideCharArray); var i: integer; begin for i := 0 to argc-1 do writeln(argv[i]); end; 例如,从C dll,您可以使用char ** argv而不是PPAnsiCharArray和void ** argv而不是PPWideCharArray. 然后,您可以轻松地将PWideChar / PAnsiChar转换回该语言的本机字符串类型. 如果您只需要编写Delphi dll,则可以使用 type TAnsiStringArray = array[0..MaxInt div SizeOf(AnsiString)-1] of AnsiString; PAnsiStringArray = ^TAnsiStringArray; TWideStringArray = array[0..MaxInt div SizeOf(WideString)-1] of WideString; PWideStringArray = ^TWideStringArray; procedure DLLFunction(argc: integer; argv: PWideStringArray); var i: integer; begin for i := 0 to argc-1 do writeln(argv[i]); end; 甚至 DLLFunction(templates); procedure DLLFunction(const templates: array of WideString); var i: integer; begin for i := 0 to high(templates) do writeln(templates[i]); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用Microsoft Web Platform Installer安装Umbraco时出现问
- win提示通信端口初始化失败如何办?
- workflow-foundation – Windows Workflow,WCF Ria服务和Si
- windows-installer – 如何在安装MSI时以编程方式检测成功或
- windows-store-apps – 如何信任Windows商店应用程序中的自
- xaml – TextBlock中的多种颜色
- windows – 如何在Visual Studio代码上删除最近打开的文件会
- .net – 如何异步打开Windows中的文件
- 如何使用Fiddler调试Windows 8 Metro风格应用的HTTP流量?
- 在Windows上用R中的SUB(1a)(Control-Z)字符读取文本文件
推荐文章
站长推荐
- 基于windows10 平台部署Kubernetes的demo程序Gue
- windows-server-2008 – 如何将Windows Server 2
- 为什么我需要SharpSvn-DB44-20-win32和SharpSvn-
- Windows:忘记本地账户开机密码,但记得住PIN码
- 删除(或添加)多余系统引导项
- windows – Delphi:如何知道TEdit何时改变大小?
- botframework – Microsoft Bot Framework Clien
- windows – “(.hg not found)”从cygwin托管的存
- windows – 在emacs中创建别名?
- macos – Applescript – 将窗口带到前台
热点阅读