从我的Delphi程序写入Windows 7中的映射网络驱动器(P :)时遇到一些问题.例如,当我尝试时,ForceDirectories('P:\test\folder')我收到错误(找不到路径).
我尝试在代码(ForceDirectories('\\computername\share\test\folder'))中键入UNC路径并且可以正常工作.但是,ExpandUNCFileName('P:\')似乎没有用; 它返回'P:\'.在Windows XP上,ExpandUNCFileName('P:\')返回UNC路径.
如何在Windows 7上获取Delphi中的UNC路径,或以其他方式写入映射的网络驱动器?
经过进一步调查,就好像我在Windows中缺少某种初始化.我有另一个使用TcxShellComboBox(一个DevExpress组件)的应用程序(app2 ).导航到P:在组合框中,在app2中,调用ExpandUNCFileName在第一个应用程序中正常工作.与FileExistsP:下的on文件相同,在app2中导航到P:之前返回False,在计算机重启之后返回true.
我发现此文档表明您可以使用备用注册表项启动Delphi.但我无法让它工作(使用Delphi 2007,也尝试过2010).我的捷径的目标是
"C:\ Program Files\CodeGear\RAD Studio\5.0\bin\bds.exe"-pDelphi -rHKEY_CURRENT_USER\Software\Borland\BDS\5.0
当我运行Delphi启动时没有加载任何包. 我以错误的方式传递密钥吗?这是2007/2010期间的功能吗?(它似乎在那里,因为在启动时正常加载的包没有加载)
我想要解决什么?:
我使用不同版本的第三方组件有不同的发行版.当我需要修复旧分支上的错误时,UI(使用后来的第三方版本运行)更改dfm,使用部分ect.适合在UI中安装的版本.旧的分支仍然链接旧版本的第三方,并崩溃
我想创建一个以shorttring数组作为参数的过程
procedure f(const a, b: Array of shortstring);
Run Code Online (Sandbox Code Playgroud)
我想用已知长度和已知长度的短串的数组来称呼它,例如
var
A, B: array[1..2] of string[5];
C, D: array[1..40] of string[12];
begin
f(A,B);
f(C,D);
end;
Run Code Online (Sandbox Code Playgroud)
这导致编译器错误E2008不兼容的类型.这是为什么?我可以编写一个可以获取shorttring数组的过程(任何长度的数组/字符串)吗?
为什么要使用短裤?
缺点是现有记录中的字段.这些记录有很多短线串.为了将数据从turbo power B-Tree Filer迁移到SQL数据库,一步是将记录转换为数据集,然后返回记录,以确认所有字段都在两个方向上正确转换.我一直在使用CompareMem记录来检查这一点,但它没有提供关于转换错误所在的字段的足够信息.因此创建了一个小程序,从记录定义中可以生成代码来比较两个记录.对于这个代码生成器,我需要一个函数来比较shorttrings.它最终CompareMem用于短线.
我正在努力摆脱短串.目前在我们的计划中使用的很多地方之一是记录.这些记录很多都保存在AVL树中.
使用的AVL树是一个通用树ElemSize,它包含一个指向多个字节()的指针,这些字节到目前为止运行良好.AVL树中每个记录的内存分配GetMem和复制Move.但是,如果string是指向引用计数结构的指针,则将内存复制回记录不再有效,因为引用的sting经常被释放(通过引用计数自动).只有一个指针和"数据块"的大小,我认为不可能增加字符串的引用计数.
我正在寻找一种方法来获取在AVL树中存储记录时要考虑的叮咬的引用计数.
我可以将记录类型传递给树构造函数,然后将指针强制转换为此类型,从而增加引用吗?或者类似的修复,我可以将更改隔离到主要在AVL单元中并调用它的构造函数.
用于分配存储AVL记录的空间的当前代码; XData是指向要存储的记录的指针:
New(RootPtr); { create new memory space }
GetMem(RootPtr^.TreeData, ElemSize);
WITH RootPtr^ DO BEGIN
{ copy data }
Move(XData^, RootPtr^.TreeData^, ElemSize);
Run Code Online (Sandbox Code Playgroud)