In case my posts on the LAVA forums aren't enough of an indication, I've always been interested in experimenting with LabVIEW's internals, trying to find hidden features. One thing I had wanted for a while was a means to edit the raw data structures in VI's directly, to see what kinds of things I can make that can't be made normally. The hidden feature I found to save VI files in an XML-based format looked promising, but while the front panel and block diagram structures were stored as XML, it still relied on a binary container format. Making matters worse, the block diagram included a checksum, so any changes to that would make LabVIEW behave as if the diagram was missing.
Eventually, I found a solution! Buried in vi.lib, in the palette API folder, were some VI's to load and save "resource" files, which is that very container format used not only by VI's, but many other LabVIEW-related files. After a bit of...let's call it "persuasion", the "Call Library" nodes in those VI's were kind enough to give me the prototypes for two internal LabVIEW exports capable of turning these files into clusters of resources, and vice versa. There was still that pesky checksum, but as it turns out, someone had already figured out how it's calculated and posted an explanation on his website.
I used that knowledge to build a set of tools that did exactly what I wanted. There's the main "resource editor", which can open VI files to add, modify, and delete resources. It's also capable of editing the .rsc files in LabVIEW's "resource" folder, which could be interesting. There's also an "Easy XML Editor", which allows you to easily experiment with changes to the XML data without having to manually save and open a VI file.
Example Usage: Creating a DBL Constant Slider
Warning: this is not something you should actually use in a production VI. In fact, after I had stopped recording, something I did caused LabVIEW to crash with an "insane typeID" error. It might be possible to "stabilize" it by immediately copying and pasting it to a new VI, but I don't know if that's possible, or if it would even make it completely safe.Download the example control used in the video
If you run into any issues/bugs, or have any other feedback, feel free to post on this tool's thread on LAVA.
This tool uses internal LabVIEW functionality in a way that has not been tested by National Instruments. It is very possible to crash or cause other problems with LabVIEW using this tool. It is only intended for experimentation with LabVIEW internals, and using this tool or anything created with it in any production code is strongly discouraged.