Sparkette Posted June 29, 2012 Report Share Posted June 29, 2012 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. 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? Quote Link to comment
Rolf Kalbermatter Posted June 29, 2012 Report Share Posted June 29, 2012 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. 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. 2 Quote Link to comment
Yair Posted June 29, 2012 Report Share Posted June 29, 2012 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). Quote Link to comment
Sparkette Posted June 29, 2012 Author Report Share Posted June 29, 2012 (edited) 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). And what is there some trick to? Edited June 29, 2012 by flarn2006 Quote Link to comment
Rolf Kalbermatter Posted June 29, 2012 Report Share Posted June 29, 2012 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 . 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! Quote Link to comment
Popular Post Darren Posted June 29, 2012 Popular Post Report Share Posted June 29, 2012 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. 4 Quote Link to comment
Sparkette Posted June 30, 2012 Author Report Share Posted June 30, 2012 (edited) 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 June 30, 2012 by flarn2006 Quote Link to comment
lordexod Posted June 30, 2012 Report Share Posted June 30, 2012 (edited) VI.Compile.Compile To DFIR CPP - This method is very intresting. Edited June 30, 2012 by lordexod Quote Link to comment
Rolf Kalbermatter Posted June 30, 2012 Report Share Posted June 30, 2012 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. Quote Link to comment
lordexod Posted June 30, 2012 Report Share Posted June 30, 2012 (edited) 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 July 5, 2012 by asbo : If you're going to spam plaintext instead of attaching it, at least use formatting. 1 Quote Link to comment
Sparkette Posted June 30, 2012 Author Report Share Posted June 30, 2012 Any function to do the reverse? Maybe you could do some interesting things by editing that code. Quote Link to comment
Rolf Kalbermatter Posted July 1, 2012 Report Share Posted July 1, 2012 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? For someone in the knows the binary data in the beginning could also contain interesting clues. Quote Link to comment
lordexod Posted July 1, 2012 Report Share Posted July 1, 2012 (edited) http://www.ni.com/white-paper/11472/en - Optimization and generate the graphs in LLVM, it's a whole different story. VI.Compile.Compile To DFIR CPP - In this case, you give Vi and reads the C++ code. Edited July 1, 2012 by lordexod 1 Quote Link to comment
lordexod Posted July 1, 2012 Report Share Posted July 1, 2012 (edited) Optimization and generate the graphs in LLVM: Is needed graph file (*.dot) editor: http://www.graphviz.org/ Edited July 1, 2012 by lordexod Quote Link to comment
Darren Posted July 2, 2012 Report Share Posted July 2, 2012 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. Quote Link to comment
Popular Post Aristos Queue Posted July 3, 2012 Popular Post Report Share Posted July 3, 2012 HEY!!! I have a perfect example for everyone of stuff to not go poking around in! The "Get LV Class Default Value.vi" ... if you pop it open with your favorite password cracker, you'll find a Call Library Node. You pass into that Call Library Node a path and an app instance refnum and out comes the LV class. And now you're thinking, "HEY! Aristos Queue didn't put that app instance refnum on the conpane of the VI! He's hiding functionality from me! I can use this to get the value of a class in another application instance!" And so you wire up a different application instance. And you run your VI. Now, sometimes you crash right away. Other times, you don't crash until you try to close the project. Other times you just get a crash on exiting of LabVIEW. In any case, you've thrown off the reference count for LV class data because -- ha -- it is an ILLEGAL OPERATION TO PUT CLASS DATA FROM A CLASS INTO THE WRONG APPLICATION INSTANCE. You have to marshall the data from one app instance into the other app instance, because the *class itself* might not exist in the other instance, or might exist with a different definition (i.e., in one app instance you loaded c:\x.lvclass and in the other you loaded d:\x.lvlclass). And, hey, if you want to go indexing off the end of a pointer into undefined memory, this is a great way to do it. I swear, by all the nodes and wires in Heaven, none of this stuff has any business being on any block diagram except for the one that it is on and that we password protected. It is either useless to you or subject to change in a future version of LV because we're still refining it and have no intention of supporting the current version (unless it passes testing and we decide to make it official, but we might not have time to do that in a given release, so it may take a while, so just because it has been there and private for a few releases doesn't mean it will be there forever). 5 Quote Link to comment
lordexod Posted July 3, 2012 Report Share Posted July 3, 2012 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 Quote Link to comment
Sparkette Posted July 6, 2012 Author Report Share Posted July 6, 2012 App.Get Active VI Ref? That one could be useful, Darren. Quote Link to comment
Darren Posted July 6, 2012 Report Share Posted July 6, 2012 App.Get Active VI Ref? That one could be useful, Darren. Definitely useful, as it was added for one of my features back in LabVIEW 8.6. I've added it to my list. Quote Link to comment
asbo Posted July 7, 2012 Report Share Posted July 7, 2012 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. Quote Link to comment
Darren Posted July 9, 2012 Report Share Posted July 9, 2012 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. It's the VI whose front panel or block diagram window currently has focus. Quote Link to comment
Sparkette Posted July 9, 2012 Author Report Share Posted July 9, 2012 (edited) 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 July 9, 2012 by flarn2006 Quote Link to comment
Yair Posted July 10, 2012 Report Share Posted July 10, 2012 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. Quote Link to comment
asbo Posted July 10, 2012 Report Share Posted July 10, 2012 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. Quote Link to comment
Darren Posted July 10, 2012 Report Share Posted July 10, 2012 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. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.