Jump to content

What exactly is SuperSecretPrivateSpecialStuff for?


Recommended Posts

The only posts I can find about this LabVIEW.ini key are from more than five years ago. Open LabVIEW.ini, and add "SuperSecretPrivateSpecialStuff=true" and then place a VI property node. Tons more properties appear, and if you select the new ones, it becomes this dark tan color, similar to scripting with the cyan color.

V5zSb.png

Interesting...too bad it's read-only.

So what exactly would make something qualify to only be enabled by this and not the scripting toggle? And Aristos, does IsGeneric indeed mean what I think it does?

Link to comment

The only posts I can find about this LabVIEW.ini key are from more than five years ago. Open LabVIEW.ini, and add "SuperSecretPrivateSpecialStuff=true" and then place a VI property node. Tons more properties appear, and if you select the new ones, it becomes this dark tan color, similar to scripting with the cyan color.

V5zSb.png

Interesting...too bad it's read-only.

So what exactly would make something qualify to only be enabled by this and not the scripting toggle? And Aristos, does IsGeneric indeed mean what I think it does?

In general unlike the scripting stuff, this are more general methods and properties added for various reasons during the development for LabVIEW, usually to allow a certain LabVIEW tool to do something. Those methods while there, do not receive the same attentions in terms of maintenance, unit test coverage and of course documentation. They can and sometimes do break under different than the intended use cases, are left outside in the cold, when NI creates a new LabVIEW version and simply are the unloved stepchild in terms of care and maintenance in general. Whoever added them for their specific tool is responsible to make sure they keep working in newer releases but it's very likely that a developer adding a new feature to LabVIEW isn't aware about some of them in the first place and in the course breaks them horribly and because of the limited unit test coverage such a breakage may not get discovered.

So in conclusion, play with them, have fun and enjoy the feeling to have a privileged position in terms of inside view into LabVIEW things, but DON'T use them for anything you want to be able to work across new LabVIEW versions without breaking your code, especially if you plan to develop something that might end up being used by other people than yourself.

  • Like 2
Link to comment

To add to what Rolf said, the tan properties and methods are known as "private". If you hover over them with the CH window open, you should see them marked as Is Private. And looking at what Rolf said, you can see why they have that name.

And Aristos, does IsGeneric indeed mean what I think it does?

It does, but you're already aware of the problems with it. Also, it's been quite a while since I played with this, but I seem to recall there is some trick to it (e.g. it has to be the control inside the array or it has to be to set on the VI as well).

Link to comment

Oh, okay, that makes sense. Thanks for explaining. They still could have used a nicer color for the property/invoke nodes, though. Like #80FF80 (this color).

Why? This color much more clearly states the situation about those nodes, than your suggestion :D. It screams at the user: go away, don't look at me, don't even think about it!!!!!

Besides the color you suggest is used in some of my company internal libraries already so I have a first use right on that! :lol:

Link to comment

Over the past few years, I have advocated that several private properties/methods that could be useful to the wider LabVIEW audience be made public/scripting. I have been largely successful. Please let me know (on this thread, or with PMs, or whatever) if y'all come across private entries that you think would be useful, and I'll see what I can do to make them official in a future LabVIEW version.

Well, I just took a quick look and noticed a couple, like App.Get Shell Icon of File and App.License.Get Licensed Version.

Also, are there any other "security levels" of properties and methods? Right now I have access to public, scripting, and private, but are there any others? I ask because for the XNodeLib type (returned by App.XNode.Create) there are no properties or methods.

Edited by flarn2006
Link to comment

VI.Compile.Compile To DFIR CPP - This method is very intresting.

I'm pretty sure it is what the Microprocessor C Development Toolkit uses and as such this function will not do much useful if you don't have a valid license for that toolkit. Remember that LabVIEW has a license management system (at least under Windows) and that much of this functionality is protected through that. As such if you have the license for the Toolkit you have the functionality much more conveniently available in the Tools menu, and if you don't have the license, this method won't do anything but give an error.

Link to comment

VI.Generate C Code Variant - That method used in LabVIEW Microprocessor SDK and generates ANSI C code.

VI.Compile.Compile To DFIR CPP - This method is generates C++ code.

Example code:

const char testviRef_data[] =                    "\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\042\000@@\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\005Array\001\000\001\000\000"                    "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\012\000\000\000\000\000\000\012\002\000\000\000"                    "\025\000\012@\000\016number: 0 to 1\000\034\000@\000\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016n"                    "umber: 0 to 1\000\030\000@\000\004\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000"                    "\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\030\000@\000\004\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012"                    "@\000\016number: 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000"                    "\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016n"                    "umber: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000"                    "\025\000\012@\000\016number: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number: 0 to "                    "1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 "                    "to 1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\001\000\000\000\025\000\012@\000\016number: 0 to 1\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001"                    "\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\025\000\012@\000\016number: 0 to 1\000\001\000\000\000\001\000\000\000\025\000\012@\000\016n"                    "umber: 0 to 1\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000"                    "\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number: "                    "0 to 1\000\014\000@\000\001\000\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000"                    "\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000"                    "\001\000\001\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\020\000@\000\002\000\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000"                    "\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000"                    "\000\000\025\000\012@\000\016number: 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number:"                    " 0 to 1\000\024\000@\000\003\000\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000"                    "\003\000\000\001\000\000\000\001\000\000\000\004\000!\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000\000\000\025\000\012@\000\016number: 0"                    " to 1\000\030\000@\000\004\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000\016number: 0 to 1\000\030\000@\000\004"                    "\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000\002\000"                    "\000\000\025\000\012@\000\016number: 0 to 1\000\034\000@\000\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\001\000\001\000\002\000\000\000\025\000\012@\000"                    "\016number: 0 to 1\000\042\000@@\005\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\000\000\005Array\001\000\001\000\001\000\000\000\005\000\003\000\000\001"                    "\000\000\000\001\000\000\000\005\000\003\000\000\001\000\000\000";     DFIR::VirtualInstrument& testviRef = DFIR::VirtualInstrument::Create(LinkIdentity(&PathRef("C:\\Users\\xxx\\Desktop\\test.vi", PathRef::kStringDisplay), NULL/*context*/));    {        DFIR::Diagram& diagramRef_1 = testviRef.GetDiagrams()[0];        DFIR::Indicator& indicatorRef_2 = DFIR::Indicator::Create(diagramRef_1, DFIR::TestUtil::MakeValue(testviRef_data, 0, 63, 20), 0, -1, false);indicatorRef_2.SetSourceID(367);        DFIR::Constant& constantRef_3 = DFIR::Constant::Create(diagramRef_1, DFIR::TestUtil::MakeValue(testviRef_data, 103, 13, 4));constantRef_3.SetSourceID(469);        DFIR::ForLoop& forLoopRef_4 = DFIR::ForLoop::Create(diagramRef_1, DFIR::LoopCondition::StopIfTrue);forLoopRef_4.SetSourceID(43);        DFIR::LoopIndex& loopIndexRef_6 = forLoopRef_4.GetLoopIndex();        DFIR::LoopCondition& loopConditionRef_7 = forLoopRef_4.GetLoopCondition();        DFIR::LoopMax& loopMaxRef_8 = forLoopRef_4.GetLoopMax();        DFIR::Tunnel& tunnelRef_9 = forLoopRef_4.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 124, 57), DFIR::TestUtil::MakeTDR(testviRef_data, 181, 53));        DFIR::Tunnel& tunnelRef_10 = forLoopRef_4.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 234, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 247, 13));        {            DFIR::Diagram& diagramRef_5 = forLoopRef_4.GetDiagrams()[0];            DFIR::ForLoop& forLoopRef_11 = DFIR::ForLoop::Create(diagramRef_5, DFIR::LoopCondition::StopIfTrue);forLoopRef_11.SetSourceID(70);            DFIR::LoopIndex& loopIndexRef_13 = forLoopRef_11.GetLoopIndex();            DFIR::LoopCondition& loopConditionRef_14 = forLoopRef_11.GetLoopCondition();            DFIR::LoopMax& loopMaxRef_15 = forLoopRef_11.GetLoopMax();            DFIR::Tunnel& tunnelRef_16 = forLoopRef_11.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 260, 53), DFIR::TestUtil::MakeTDR(testviRef_data, 313, 49));            DFIR::Tunnel& tunnelRef_17 = forLoopRef_11.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 362, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 375, 13));            {                DFIR::Diagram& diagramRef_12 = forLoopRef_11.GetDiagrams()[0];                DFIR::ForLoop& forLoopRef_18 = DFIR::ForLoop::Create(diagramRef_12, DFIR::LoopCondition::StopIfTrue);forLoopRef_18.SetSourceID(95);                DFIR::LoopIndex& loopIndexRef_20 = forLoopRef_18.GetLoopIndex();                DFIR::LoopCondition& loopConditionRef_21 = forLoopRef_18.GetLoopCondition();                DFIR::LoopMax& loopMaxRef_22 = forLoopRef_18.GetLoopMax();                DFIR::Tunnel& tunnelRef_23 = forLoopRef_18.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 388, 49), DFIR::TestUtil::MakeTDR(testviRef_data, 437, 45));                DFIR::Tunnel& tunnelRef_24 = forLoopRef_18.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 482, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 495, 13));                {                    DFIR::Diagram& diagramRef_19 = forLoopRef_18.GetDiagrams()[0];                    DFIR::ForLoop& forLoopRef_25 = DFIR::ForLoop::Create(diagramRef_19, DFIR::LoopCondition::StopIfTrue);forLoopRef_25.SetSourceID(120);                    DFIR::LoopIndex& loopIndexRef_27 = forLoopRef_25.GetLoopIndex();                    DFIR::LoopCondition& loopConditionRef_28 = forLoopRef_25.GetLoopCondition();                    DFIR::LoopMax& loopMaxRef_29 = forLoopRef_25.GetLoopMax();                    DFIR::Tunnel& tunnelRef_30 = forLoopRef_25.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 508, 45), DFIR::TestUtil::MakeTDR(testviRef_data, 553, 41));                    DFIR::Tunnel& tunnelRef_31 = forLoopRef_25.CreateTunnel(DFIR::Terminal::Input, DFIR::Tunnel::NonIndexing, DFIR::TestUtil::MakeTDR(testviRef_data, 594, 13), DFIR::TestUtil::MakeTDR(testviRef_data, 607, 13));                    {                        DFIR::Diagram& diagramRef_26 = forLoopRef_25.GetDiagrams()[0];                        DFIR::ForLoop& forLoopRef_32 = DFIR::ForLoop::Create(diagramRef_26, DFIR::LoopCondition::StopIfTrue);forLoopRef_32.SetSourceID(145);                        DFIR::LoopIndex& loopIndexRef_34 = forLoopRef_32.GetLoopIndex();                        DFIR::LoopCondition& loopConditionRef_35 = forLoopRef_32.GetLoopCondition();                        DFIR::LoopMax& loopMaxRef_36 = forLoopRef_32.GetLoopMax();                        DFIR::Tunnel& tunnelRef_37 = forLoopRef_32.CreateTunnel(DFIR::Terminal::Output, DFIR::Tunnel::Indexing, DFIR::TestUtil::MakeTDR(testviRef_data, 620, 41), DFIR::TestUtil::MakeTDR(testviRef_data, 661, 29));                        {   	                     DFIR::Diagram& diagramRef_33 = forLoopRef_32.GetDiagrams()[0];   	                     DFIR::RandomNumber0To1Primitive& randomNumber0To1PrimitiveRef_38 = DFIR::RandomNumber0To1Primitive::Create(diagramRef_33);randomNumber0To1PrimitiveRef_38.SetSourceID(170);   	                     DFIR::Wire& wireRef_49 = DFIR::Wire::Create(diagramRef_33, 2);wireRef_49.SetSourceID(262);    	                     {   		                     std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_34, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 690, 13)));   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_35, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 703, 12)));   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_36, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 715, 13)));   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&randomNumber0To1PrimitiveRef_38, 0, &wireRef_49, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 728, 29)));   		                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_49, 1, &tunnelRef_37, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 757, 29)));   		                     DFIR::TestUtil::ConnectNodes(connectivityVec);   	                     }                        }                        DFIR::Wire& wireRef_47 = DFIR::Wire::Create(diagramRef_26, 2);wireRef_47.SetSourceID(246);                        DFIR::Wire& wireRef_48 = DFIR::Wire::Create(diagramRef_26, 2);wireRef_48.SetSourceID(582);                         {   	                     std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_27, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 786, 13)));   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_28, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 799, 12)));   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_29, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 811, 13)));   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_31, 1, &wireRef_48, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 824, 13)));   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_32, 1, &wireRef_47, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 837, 41)));   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_47, 1, &tunnelRef_30, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 878, 41)));   	                     connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_48, 1, &loopMaxRef_36, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 919, 13)));   	                     DFIR::TestUtil::ConnectNodes(connectivityVec);                        }                    }                    DFIR::Wire& wireRef_45 = DFIR::Wire::Create(diagramRef_19, 2);wireRef_45.SetSourceID(230);                    DFIR::Wire& wireRef_46 = DFIR::Wire::Create(diagramRef_19, 3);wireRef_46.SetSourceID(558);                     {                        std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_20, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 932, 13)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_21, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 945, 12)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_22, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 957, 13)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_24, 1, &wireRef_46, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 970, 13)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_25, 1, &wireRef_45, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 983, 45)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_45, 1, &tunnelRef_23, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 1028, 45)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_46, 1, &loopMaxRef_29, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1073, 13)));                        connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_46, 2, &tunnelRef_31, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1086, 13)));                        DFIR::TestUtil::ConnectNodes(connectivityVec);                    }                }                DFIR::Wire& wireRef_43 = DFIR::Wire::Create(diagramRef_12, 2);wireRef_43.SetSourceID(214);                DFIR::Wire& wireRef_44 = DFIR::Wire::Create(diagramRef_12, 3);wireRef_44.SetSourceID(534);                 {                    std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_13, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1099, 13)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_14, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1112, 12)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_15, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1124, 13)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_17, 1, &wireRef_44, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1137, 13)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_18, 1, &wireRef_43, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1150, 49)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_43, 1, &tunnelRef_16, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 1199, 49)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_44, 1, &loopMaxRef_22, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1248, 13)));                    connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_44, 2, &tunnelRef_24, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1261, 13)));                    DFIR::TestUtil::ConnectNodes(connectivityVec);                }            }            DFIR::Wire& wireRef_41 = DFIR::Wire::Create(diagramRef_5, 2);wireRef_41.SetSourceID(198);            DFIR::Wire& wireRef_42 = DFIR::Wire::Create(diagramRef_5, 3);wireRef_42.SetSourceID(510);             {                std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopIndexRef_6, 0, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1274, 13)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(NULL, 0, &loopConditionRef_7, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1287, 12)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&loopMaxRef_8, 1, NULL, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1299, 13)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&tunnelRef_10, 1, &wireRef_42, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1312, 13)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_11, 1, &wireRef_41, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1325, 53)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_41, 1, &tunnelRef_9, 1, DFIR::TestUtil::MakeTDR(testviRef_data, 1378, 53)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_42, 1, &loopMaxRef_15, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1431, 13)));                connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_42, 2, &tunnelRef_17, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1444, 13)));                DFIR::TestUtil::ConnectNodes(connectivityVec);            }        }        DFIR::Wire& wireRef_39 = DFIR::Wire::Create(diagramRef_1, 2);wireRef_39.SetSourceID(380);        DFIR::Wire& wireRef_40 = DFIR::Wire::Create(diagramRef_1, 3);wireRef_40.SetSourceID(475);         {            std::vector<DFIR::TestUtil::NodeConnectionSpecification> connectivityVec;            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&constantRef_3, 0, &wireRef_40, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1457, 13)));            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&forLoopRef_4, 1, &wireRef_39, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1470, 57)));            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_39, 1, &indicatorRef_2, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1527, 63)));            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_40, 1, &loopMaxRef_8, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1590, 13)));            connectivityVec.push_back(DFIR::TestUtil::NodeConnectionSpecification(&wireRef_40, 2, &tunnelRef_10, 0, DFIR::TestUtil::MakeTDR(testviRef_data, 1603, 13)));            DFIR::TestUtil::ConnectNodes(connectivityVec);        }    }

Edited by asbo
: If you're going to spam plaintext instead of attaching it, at least use formatting.
  • Like 1
Link to comment

Any function to do the reverse? Maybe you could do some interesting things by editing that code.

Maybe start reading this. I can't say I understand it on more than a very superficial level.

Personally I think the result of this node is likely a result of exposing some interna in order to help debugging the DFIR and LLVM functionality without always having to dig into the C++ source code debugger itself. Following memory dumps from the C source debugger is immensely frustrating and error prone so creating a possibility to see what the DFIR algorithm created in order to debug optimization problems is so much more easy. Without access to the GenAPI and the LLVM integration into it, the result is however likely not very useful for someone.

By the way is the user name "xxx" in your dump the result of an after the fact edit of the dump to hide your identity or the result of running such exercises in a special user account to avoid possible interferences with the rest of your system by such exercises? :P

For someone in the knows the binary data in the beginning could also contain interesting clues.

Link to comment

The "wider LabVIEW audience" doesn't include all the l33t h4xx0rz talk on this thread, so don't expect any of the DFIR compilation or Licensing stuff to ever become public. :) Keep in mind we need to run any public/scripting VI Server stuff through rigorous documentation and testing before releasing it to a wider audience. As has been mentioned multiple times by myself and AQ in the past, something is private usually because it's been designed and used for one specific use case, with no other cases really documented or tested.

Now, Get Shell Icon of File, on the other hand, I could see being useful to the general public. I'll put that on my list to advocate for LabVIEW 2013.

Link to comment

Get LV Class Default Value.vi

Options = 0x20000000 -> LoadStateFlags = InstantiateTemplate

Options = 0x20 -> LoadStateFlags = NoProg

Options = 0x10 -> LoadStateFlags = None

Options != 0x10 -> LoadStateFlags = NoDialog

Options = 0x1 -> LoadStateFlags = None

Options != 0x1 -> LoadStateFlags = SuppressDocMods

Link to comment

Definitely useful, as it was added for one of my features back in LabVIEW 8.6. :) I've added it to my list.

Does Active in this context to the VI with FP focus? If there's any context help for that I don't have the ability to reference it right now.

Link to comment

I found one that probably won't be made public, but it's still interesting. Create an Application property node, and then go to Application->Defer Drawing in the menu. Wire a True constant to it, and then click the Run arrow. It will look like it's still running, but it's not. It just didn't update the appearance. Try changing the constant to False, or making some other edit, and it will work, but you won't see it. It's kind of trippy, like as if LabVIEW got drunk or something.

Edited by flarn2006
Link to comment

I never noticed the Defer Drawing before, but I have an educated guess as to its purpose - the FP has a defer updates property which is useful when you want to make a lot of updates in sequence, but have them appear as a single update, either for speed or for elegance. I'm assuming this is a parallel property which was designed for scripting - if you want to make a lot of scripting operations, you don't want to waste time on drawing all the intermediate steps.

I'm not sure why this is in the Application class and not in the Top Level Diagram class, but that's possibly because it's expected you would edit more than one VI or because of implementation details or because it's for something else entirely.

Link to comment

I never noticed the Defer Drawing before, but I have an educated guess as to its purpose - the FP has a defer updates property which is useful when you want to make a lot of updates in sequence, but have them appear as a single update, either for speed or for elegance. I'm assuming this is a parallel property which was designed for scripting - if you want to make a lot of scripting operations, you don't want to waste time on drawing all the intermediate steps.

Hmm. I would if it could be made useful in a production application? The only possibility I can come up with is if you have multiple UIs and are too lazy to defer each individually.

Link to comment

I never noticed the Defer Drawing before, but I have an educated guess as to its purpose - the FP has a defer updates property which is useful when you want to make a lot of updates in sequence, but have them appear as a single update, either for speed or for elegance. I'm assuming this is a parallel property which was designed for scripting - if you want to make a lot of scripting operations, you don't want to waste time on drawing all the intermediate steps.

I'm not sure why this is in the Application class and not in the Top Level Diagram class, but that's possibly because it's expected you would edit more than one VI or because of implementation details or because it's for something else entirely.

There's already a private 'Defer Diagram Updates' property on the TopLevelDiagram class. I have no idea what the App.Defer Drawing property is used for.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.