是否可以从Progress ABL中执行C ++代码?
具体来说,我希望使用函数SHGetKnownFolderPath (documentation here)来确定Windows 7计算机上“Documents”文件夹的位置,该文件夹将文档文件夹重定向到另一个位置。
或者,是否有其他方法可以确定此信息而无需检查注册表项?
答案 0 :(得分:1)
您可以调用外部共享库和DLL。
http://documentation.progress.com/output/OpenEdge113/pdfs/dvpin/dvpin.pdf
第3节"外部接口"是你在寻找的。 p>
此http://dbappraise.com/ppt/shlib.pptx也可能有所帮助。
由于它命名的方式,C ++经常会出现问题。你可能最好建立一个" shim"使用普通的旧C在OpenEdge和C ++之间架起桥梁
通过调用Windows系统功能通常很容易。类似的东西:
procedure SHGetKnownFolderPath external "pathToLibrary":
define parameter a as someType.
define parameter b as someType.
define return parameter x as someType.
end.
答案 1 :(得分:0)
检查"编程接口"文档,"外部程序接口"部分。
此外,某些版本的ABL也支持直接.NET调用。
答案 2 :(得分:0)
在咨询了一些来源后,我能够在 10.2B 中使用它:
SHGetKnownFolderPath 的难点在于需要通过引用传递的 rfid
参数。 C# 具有注释 [System.Runtime.InteropServices.MarshalAs(UnmanagedType.LPStruct)]
或 ref
关键字。由于 Progress OpenEdge 对外部过程参数数据类型的限制,我无法弄清楚如何传递 System.Guid
的引用,因此我执行了 .NET Guid
的字节复制并通过 {{1} 传递了它}}。我很抱歉在这里过分依赖 .NET。
这是一个工作示例,它获取提供的已知文件夹 GUID,以及获取 Documents 文件夹的用法:
MEMPTR