我如何在 LabVIEW 中使用内部类型转换(在不兼容 pointers/references 之间)强制断线?
How do I force broken wires with intrinsic typecast (between incompatible pointers/references) in LabVIEW?
我喜欢使用 C 语言的免费软件库和调用库函数节点,我目前正在编写 LibXML2 接口。有了它,我就有了指向文档、节点、元素等的 DLL 指针,定义为指向 DLL 内存中位置的 Magic cookies space.
当我为节点和文档创建严格的 typedef 时,LabView 允许我将文档魔术 cookie 连接到节点魔术 cookie(或指针,反之亦然)并且仅指示内部转换。有没有一种方法可以定义一个引用或无符号 32 typedef 来产生断线而不是允许它使用内部铸造的红点?
不,这是不可能的,因为您的 typedef 和调用库函数节点输入的“主要”类型相同。 Typedef 将在不兼容的枚举、环或簇的情况下工作——当 LabVIEW 不知道如何转换或匹配数据类型时。
在您的情况下 - 您可以使用 VI Analyzer 测试来搜索转换点 (Block Diagram Tests (VI Analyzer Toolkit))。或者,如果可能的话——使用 U32 作为 VI 的 inputs/outputs 的 typedef 集群围绕你的 dll 调用创建子 VI 包装器——针对不同类型的节点分开。然后,当您在更高级别 API 中调用这些子 VI 时,您将能够在彼此之间连接正确的输入类型。但是当然,这取决于那个dll是如何制作的。
另一种选择——它不会直接回答你的问题——是使用 LabVIEW 工具包进行 XML 解析,LabVIEW 工具网络上提供了这些工具包,其中大部分是免费的(你也可以使用以下方式下载它们VI 包管理器)。
是的,这是可能的。这有点奇怪,但该技术已经使用了很长时间(至少 LV3.0)并且没有任何进展。
假设您要创建一个 Node 魔术饼干类型。
- 创建枚举 typedef 和枚举中的 1 个元素。使元素的文本为“Node”。将枚举保存为“Node Enum.ctl”
- 创建一个新的 typedef。在前面板上放置一个数据记录引用句柄,并将节点 Enum.ctl 放入其中。将其保存为“节点 Reference.ctl”。给这个 .ctl 一个适合你类型的图标。
- 现在,只要您从调用库节点中获得 return 的 int32,就可以使用 Type Cast 原语将该 int32 转换为“节点 Reference.ctl”。 (或者,您可以将调用库节点终端的类型设置为“适应类型”,然后连接这些 ctls 之一来定义类型。)
现在构建其中的第二个,但是在我写“Node”的所有地方,替换为“Doc”。
如果这样做,“Node Reference.ctl”类型的连线将不会强制转换为“Doc Reference.ctl”类型的连线。两者都将作为 refnum 连线,并且您的引用具有强类型。
我喜欢使用 C 语言的免费软件库和调用库函数节点,我目前正在编写 LibXML2 接口。有了它,我就有了指向文档、节点、元素等的 DLL 指针,定义为指向 DLL 内存中位置的 Magic cookies space.
当我为节点和文档创建严格的 typedef 时,LabView 允许我将文档魔术 cookie 连接到节点魔术 cookie(或指针,反之亦然)并且仅指示内部转换。有没有一种方法可以定义一个引用或无符号 32 typedef 来产生断线而不是允许它使用内部铸造的红点?
不,这是不可能的,因为您的 typedef 和调用库函数节点输入的“主要”类型相同。 Typedef 将在不兼容的枚举、环或簇的情况下工作——当 LabVIEW 不知道如何转换或匹配数据类型时。
在您的情况下 - 您可以使用 VI Analyzer 测试来搜索转换点 (Block Diagram Tests (VI Analyzer Toolkit))。或者,如果可能的话——使用 U32 作为 VI 的 inputs/outputs 的 typedef 集群围绕你的 dll 调用创建子 VI 包装器——针对不同类型的节点分开。然后,当您在更高级别 API 中调用这些子 VI 时,您将能够在彼此之间连接正确的输入类型。但是当然,这取决于那个dll是如何制作的。
另一种选择——它不会直接回答你的问题——是使用 LabVIEW 工具包进行 XML 解析,LabVIEW 工具网络上提供了这些工具包,其中大部分是免费的(你也可以使用以下方式下载它们VI 包管理器)。
是的,这是可能的。这有点奇怪,但该技术已经使用了很长时间(至少 LV3.0)并且没有任何进展。
假设您要创建一个 Node 魔术饼干类型。
- 创建枚举 typedef 和枚举中的 1 个元素。使元素的文本为“Node”。将枚举保存为“Node Enum.ctl”
- 创建一个新的 typedef。在前面板上放置一个数据记录引用句柄,并将节点 Enum.ctl 放入其中。将其保存为“节点 Reference.ctl”。给这个 .ctl 一个适合你类型的图标。
- 现在,只要您从调用库节点中获得 return 的 int32,就可以使用 Type Cast 原语将该 int32 转换为“节点 Reference.ctl”。 (或者,您可以将调用库节点终端的类型设置为“适应类型”,然后连接这些 ctls 之一来定义类型。)
现在构建其中的第二个,但是在我写“Node”的所有地方,替换为“Doc”。
如果这样做,“Node Reference.ctl”类型的连线将不会强制转换为“Doc Reference.ctl”类型的连线。两者都将作为 refnum 连线,并且您的引用具有强类型。