Call by reference into a subpanel won't execute called VIT with a loop

LabVIEW experts check this out....
I've attached a sample program (Main VI.vi) that simply calls a VIT by reference (Subpanel3 VI.vit).  The template simply adds two numbers, but the front panel does NOT show up if there is a loop in the template.  If the loop is removed, everything works fine and of course the template runs fine standalone.  You can verify this by removing the loop, then resaving the template that is called.
Is this a bug or am I missing something?
TR
><><><><><><
Tommy R.
><><><><><><
Attachments:
callByReference.zip ‏15 KB

Hello <<-N->>
In the above example, it is not possible to interact with the subpanel when the 'Wait Until Done' flag is set to TRUE because of how the run VI invoke node is wired to the subpanel invoke node. In this setup, the subpanel invoke node cannot run until the run VI node has finished due to the error wire and VI reference wire that come from the output of the run VI invoke node. Basically the subpanel is waiting on that data before it can run, and if you select the 'Wait Until Done' to be true, then the VI wont continue executing until the VI that was called is finished running. You can refer to this page for help better understanding program dataflow: http://www.ni.com/gettingstarted/labviewbasics/dataflow.htm#Wires
I've attached a picture of how you would construct the VI to be able to interact with the subpanel, while still setting the wait until done flag to TRUE. Note that the subpanel invoke node does not have to wait on the Run VI invoke node before it can run. (This is modified from the Simple Subpanel.VI in the example finder).
I hope this helps!
-Nathan H
Software Developer
National Instruments
Attachments:
subpanel_control.JPG ‏96 KB

Similar Messages

  • Beginner Question: Won't execute index to nested while loop

    Problem:
    I have a nested while loop inside a for loop. The for loop runs over and over from 0 to 587. I want the while loop to only execute when the for loop hits 587 by means of a continue condition which is on when 587 = [ i ], the for loop iteration number. However when I try to change the value sent to the while loop from 588 none of the probes execute. This is bad because the index only runs from 0 to 587 and never equals 588.
    Context:
    This is for real time video analysis. Trying to convert a 658 x 492 color video feed frame by frame into low resolution grayscale video. With this index error the output is currently the top left 1/4 of the image, repeated in a 2x2 grid on the image display.
    The VI is attached. I'm very appreciative of your thoughts on this.
    Attachments:
    Bin.vi ‏237 KB

    The for loop is responsible for processing a frame. At the completion of the execution of [ i ] from 0 to 587, the replace array VI outputs the final product of the frame. So every time [ i ] = 587, the replace array VI needs to send its array to the arraytoimage, which in turn must send the image to the image display.
    I got rid of the while loop and replaced it with the case structure. 
    Maybe the problem is with the false case of the case structure? I want to continue outputting the same image for the next [0, 586] each time after it sends an updated image on the [ i ] = 587 iteration.
    Attachments:
    Bin.vi ‏238 KB

  • Open VI Reference Function won't execute in multi process application

    I have a sub vi with Reentrant execution, and it has
    recursive call on some cases.
    It is very similar to OpenG VI “Read Key
    (Variant)__ogtk.vi”, my sub vi works without any problem unit LabVIEW’s Two
    Button Dialog is opened in other process loop.
    I have attached a Test VI, and would like to understand why
    would Loop 1’s Dialog box have any execution impact on Loop 2’s process?
    Why Open VI Reference Function won’t execute when Two Button
    Dialog is opened in other process?
    LabVIEW version 8.6
    Thanks,
    Attachments:
    Test Vi.zip ‏17 KB

    Broken Arrow wrote:
    LabVIEW's native dialog box is Modal. It will not let anything else run which requires (or MAY require) user input. In the case of your code, LabVIEW can't open a VI with a modal process going.
    Broken Arrow thanks for your reply, but not sure if I understand Modal dialog box would cause the problem.
      I already had a work around by using Three Button Dialog VI, and it is s Modal VI.
      I would still like to understand, why would DataFlow halt at Open VI Reference Function in Loop 2 when I use when Two Button Dialog?
    Attachments:
    Test Vi 2.zip ‏20 KB

  • I'm using a late 2006 2.33GHz imac.I clean installed 10.6 from disc then updated to 10.7 from download.Now every time my computer goes into sleep it won't wake up.Anyone know how to cure this problem please??

    I'm using a late 2006 2.33GHz imac.
    I clean installed 10.6 from disc then updated to 10.7 from download.
    Now every time my computer goes into sleep it won't wake up.
    The only way it will restart is to pull the mains lead out of the imac, put it back and try until it will start.
    This only happened after reinstalling.  Only Apple OS was on the imac and so it must be an issue with the software I believe.....
    Anyone know how to cure this problem please?
    Thanks
    paul

    This isn't a fix, more a workaround I used when I had wake from sleep problems that lasted from some point in 10.6.x, through 10.7 and into 10.8 (got fixed for me in 10.8.2). It seems to be connected with Bluetooth failing to wake up properly:
    System Preferences>Energy Saver and set 'computer sleep' to 'never'.

  • Okay so my IPod touch 4 won't play music through any headphone I put into the port. I've tried it with 4-5 different headphones but it still won't work.  How can I fix this?

    Okay so my IPod touch 4 won't play music through any headphone I put into the port. I've tried it with 4-5 different headphones but it still won't work.  How can I fix this? This isn't the first time something like this has happened but it has never stayed this way for such a long time. If I have to send it in for repairs I will but I'm not sure if its under warranty

    To check for warranty coverage:
    https://selfsolve.apple.com/agreementWarrantyDynamic.do
    - Try cleaning out/blowing out the headphone jack. Try inserting/removing the plug a dozen times or so. There is a little switch in the headphone jack that disconnects the speaker when the headphone jack is inserted.
    Try the following to rule out a software problem
    - Reset the iOS device. Nothing will be lost
    Reset iPod touch: Hold down the On/Off button and the Home button at the same time for at
    least ten seconds, until the Apple logo appears.
    - Reset all settings
    Go to Settings > General > Reset and tap Reset All Settings.
    All your preferences and settings are reset. Information (such as contacts and calendars) and media (such as songs and videos) aren’t affected.
    - Restore from backup
    - Restore to factory settings/new iOS device.
    - Make an appointment at the Genius Bar of an Apple store. Seems you have a bad headphone jack.
    Apple Retail Store - Genius Bar
    If not under warranty Apple will exchange your iPod for a refurbished one for $199 for 64 GB 4G and $99 for theother 4Gs. They do not fix yours.
    Apple - iPod Repair price                  
    A third-party place like the following will replace the jack for less. Google for more.
    iPhone Repair, Service & Parts: iPod Touch, iPad, MacBook Pro Screens
    Replace the jack yourself
    iPod Touch Repair – iFixit

  • The buttons in main the vi get locked after opening a vi reference in a subpanel and using buttons within the subpanel.

    I am trying to open a reference to a vi in the subpanel of the main vi. However after the vi opens in the subpanel and after pressing a few buttons in the subpanel the buttons in the main vi get locked, i.e. I can't even close the main vi or control anything else. Is there any way how I can avoid this happening?

    > The buttons in main the vi get locked after opening a vi reference in
    > a subpanel and using buttons within the subpanel.
    >
    > I am trying to open a reference to a vi in the subpanel of the main
    > vi. However after the vi opens in the subpanel and after pressing a
    > few buttons in the subpanel the buttons in the main vi get locked,
    > i.e. I can't even close the main vi or control anything else. Is there
    > any way how I can avoid this happening?
    This is most likely happening because in either the top or sub panel,
    there is an event structure that is queuing events, and is set to lock
    the panel until the events are handled, and because of the logic in the
    diagram, the events aren't being pulled from the queue.
    So, you have a deadlock. You are waiting
    on the panel. The panel is
    waiting on the diagram. And the diagram is waiting on something else.
    So, if there are indeed event structures involved, determine where in
    the diagram things are delaying. Also, if you do not need the panel to
    lock until the event is handled, you can change the setting in the
    events dialog on the structure. But the events will still be queued
    until the diagram starts executing.
    Greg McKaskle

  • I have photoshop cs6 om a pc. My coumper guy took my old c drive and cloned it to a new oneand installed it. now when I go into  bridge it won't let me do any editing. I can't put stars or colors on the photos.

    I have photoshop cs6 on a pc. My computer guy took my old c drive and cloned it to a new one and installed it. now when I go into  bridge it won't let me do any editing. I can't put stars or colors on the photos.

    >I am trying to load my new programs onto this laptop
    Actually, no you're not. You're trying to load old programs on this computer - programs that are based around the old (dead?) Mac OS 9, not Mac OS X.
    The main problem is that Mac OS X no longer comes with Mac OS 9. If you want to run Mac OS 9 applications you can, but you'll need to source a copy of Mac OS 9 and install that before you can. Off hand I don't know of any sources for Mac OS 9.x. Apple no longer sell it. eBay might be an option.
    Either that, or just use Mac OS X applications. You'd probably prefer that anyway.
    Finally, as an aside, this doesn't really have anything to do with AppleScript, so posting in the appropriate forum might get you better luck.

  • A script to make all page references into hyperlinks

    Hi,
    I have a customer request to make all pages references into hyperlinks.
    For example: when you see in the text of the PDF "page 4", you can click on it and move to page 4. This of course can be done manually with InDesign. The problem starts when you have whole load of them. In addition to that, I have this project as a book, with several different documents...
    I used the script "Automatic hyperlink of each word in a file" from http://www.nobrainer.dk/automatic-hyperlink-of-each-word-in-a-file/ as a base, and modified it for my porpuse. Currently it still produces errors. Any idea what's the bug?
    if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var myHyperlinkStyle = myDocument.characterStyles.item("hyperlink"); // replace hyperlink with name of your char style for links
    //alert(myHyperlinkStyle);
    main();
    } else {
    alert("Please open a document");
    function main() {
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    //the value to find
    myFindVal = "page (\\d+)";
    doSearchAndReplace(myFindVal, app.activeDocument);
    // reset search
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    function doSearchAndReplace(stringfind, searchin) {
    app.findGrepPreferences.findWhat = stringfind;
    //Set the find options.
    app.findChangeGrepOptions.includeFootnotes = true;
    app.findChangeGrepOptions.includeHiddenLayers = false;
    app.findChangeGrepOptions.includeLockedLayersForFind = false;
    app.findChangeGrepOptions.includeLockedStoriesForFind = false;
    app.findChangeGrepOptions.includeMasterPages = false;
    var myFoundItems = searchin.findGrep();
    for (i = 0; i < myFoundItems.length; i++) {
    var item = myFoundItems[i].contents;
    //the destination page
    var destPage = item.slice(5);
    var myHyperlinkDestination = myMakeHyperlinkDestination(destPage);
    myMakeHyperlink(myFoundItems[i], myHyperlinkDestination);
    myFoundItems[i].applyCharacterStyle(myHyperlinkStyle, false);
    function myMakeHyperlink(myFoundItem, myHyperlinkDestination){
    try {
    var myHyperlinkTextSource = myDocument.hyperlinkTextSources.add(myFoundItem);
    var myHyperlink = myDocument.hyperlinks.add(myHyperlinkTextSource, myHyperlinkDestination);
    myHyperlink.visible = false;
    catch(myError){
    function myMakeHyperlinkDestination(myDestPage){
    //If the hyperlink destination already exists, use it;
    //if it doesn't, then create it.
    try{
    var myHyperlinkDestination = myDocument.hyperlinkDestinations.item(myDestPage);
    myHyperlinkDestination.name;
    catch(myError){
    myHyperlinkDestination = myDocument.hyperlinkPageDestinations.add(myDestPage);
    myHyperlinkDestination.destinationPage = myDestPage;
    myHyperlinkDestination.name = myDestPage;
    //Set other hyperlink properties here, if necessary.
    return myHyperlinkDestination;

    well, after some more digging into it, I found the bugs and corrected, here is the corrected version (now I only need to figure out how to do it on an entire book...):
    if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var myHyperlinkStyle = myDocument.characterStyles.item("hyperlink"); // replace hyperlink with name of your char style for links
    //alert(myHyperlinkStyle);
    main();
    } else {
    alert("Please open a document");
    function main() {
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    //the value to find
    myFindVal = "page (\\d+)";
    doSearchAndReplace(myFindVal, app.activeDocument);
    // reset search
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    function doSearchAndReplace(stringfind, searchin) {
    app.findGrepPreferences.findWhat = stringfind;
    //Set the find options.
    app.findChangeGrepOptions.includeFootnotes = true;
    app.findChangeGrepOptions.includeHiddenLayers = false;
    app.findChangeGrepOptions.includeLockedLayersForFind = false;
    app.findChangeGrepOptions.includeLockedStoriesForFind = false;
    app.findChangeGrepOptions.includeMasterPages = false;
    var myFoundItems = searchin.findGrep();
    for (i = 0; i < myFoundItems.length; i++) {
    var item = myFoundItems[i].contents;
    //the destination page
    var destPageNumber = item.slice(5);
    var destPage = searchin.pages.itemByName(destPageNumber);
    var myHyperlinkDestination = myMakeHyperlinkDestination(destPage);
    myMakeHyperlink(myFoundItems[i], myHyperlinkDestination);
    myFoundItems[i].applyCharacterStyle(myHyperlinkStyle, false);
    function myMakeHyperlink(myFoundItem, myHyperlinkDestination){
    try {
    var myHyperlinkTextSource = myDocument.hyperlinkTextSources.add(myFoundItem);
    var myHyperlink = myDocument.hyperlinks.add(myHyperlinkTextSource, myHyperlinkDestination);
    myHyperlink.visible = false;
    catch(myError){
    function myMakeHyperlinkDestination(myDestPage){
    //If the hyperlink destination already exists, use it;
    //if it doesn't, then create it.
    try{
    var myHyperlinkDestination = myDocument.hyperlinkDestinations.item(myDestPage);
    myHyperlinkDestination.name;
    catch(myError){
    myHyperlinkDestination = myDocument.hyperlinkPageDestinations.add(myDestPage);
    myHyperlinkDestination.destinationPage = myDestPage;
    //myHyperlinkDestination.name = myDestPage.name;
    //Set other hyperlink properties here, if necessary.
    return myHyperlinkDestination;

  • How to add some reference into naming/ejb service?

    are there some ways to add some reference into naming/ejb service for them to visit my library/interface/service.
    thanks for your reply.

    I am not sure of what you are asking, can you elaborate please?
    Check out the "Application Reference" concept at <a href="http://help.sap.com/saphelp_nw04/helpdata/en/28/c9a3a9606f434ea757a3536d220704/content.htm">Application references</a>
    Regards,
    Kiran

  • Creating reference of a subpanel to pass to a subvi

    It does not appear to be possible to creat a reference to a subpanel (to pass to a subvi). Can someone confirm this? Can a subvi in anyway access the subpanel of another vi? This will make my code much more object oriented. Does anyone else feel this is a desired feature? Thanks.
    Zuolan

    In LabVIEW 7.0, on the front panel, popup on the frame of the subpanel control and select Create > Reference. It will create a reference for the subpanel. you can then create control from this and place that on your subVI.
    I haven't actually tried to use one, but I did notice that it does create it.
    Bob Young - Test Engineer - Lapsed Certified LabVIEW Developer
    DISTek Integration, Inc. - NI Alliance Member
    mailto:[email protected]

  • Encapsulation of references into one dll

    I have many dll references into my project from dependency folder.
    Is there any way to create new project which encapsulate all these references, so I can have in my main project only 1 single reference?
    RUV

    You could use an external tool to merge all your dll's into 1dll with
    ILMerge.

  • Re: [Fwd: Java Applet IIOP Call-In with Release 3C--How dowe speed up d

    Hi Michael,
    We have done exactly what you describe and have avoided the slow applet
    download times. Although it can be a bit tricky, it is possible to use
    the ORB bundled inside the Netscape 4.0 browser (Visibroker for Java by
    Visigenic). Most of the code should follow Netscape's examples (on
    http://developer.netscape.com)--just remember to initialize the ORB by
    passing a reference to the current applet in orb_init() (so that you
    invoke something like orb_init(this) [assuming you are extending
    java.applet.Applet]). Pulling up the Java console within your web
    browser should help debug quite a bit (a lot of debug messages will get
    printed there the ORB is having problems).
    Netscape has just implemented the applet caching schemes you describe,
    so it probably shouldn't matter too much if you use another vendor's
    ORB (we've done this with Iona's OrbixWeb). If you use ZIP files, they
    have to be uncompressed, and I don't think that the browser will cache
    them between browser sessions. Netscape 4.0 does seem to handle
    compressed JAR files just fine and it does indeed cache them between
    browser sessions. I'd go with the JAR format anyway since the ZIP
    bundling was just a workaround until Sun got their act together in the
    1.1 JDK.
    By the way, you also might want to take advantage of the code-signing
    and capabilities APIs of Netscape if you are going to invoke methods on
    objects not resident on your web server. Otherwise, you will probably
    run into the (in)famous browser applet security restrictions and you may
    have other problems doing things like callbacks from Forte, etc.
    If you want more detail on how it works, let me know and I can post some
    examples.
    Oh, one last thing: we are a consulting firm specializing in these kinds
    of things :)
    Bill
    Subject: Java Applet IIOP Call-In with Release 3C--How do we speed up download time.
    Date: Wed, 2 Jul 1997 09:10:31 -0500
    From: Michael Nelson <[email protected]>
    To: "'[email protected]'" <[email protected]>
    We have successfully implemented a simple Java Applet that calls into
    Forte Services via IIOP. However, the duration of the download time
    for
    Applet and its required class files is UNACCEPTABLE in a typical
    INTERNET environment where 28.8K modems and multiple hops around the
    net
    are not uncommon. We dialed into our network at 28.8K (but no
    hopping),
    and found that download times varied from 1.5 - 2.0 minutes. This is
    unacceptable, even by internet standards. We have been using the
    Visigenic Visibroker product as the ORB.
    After doing some investigation, we've come up with several ideas to
    speed up download time:
    1. Figure out how to use the Visigenic components (CORBA/IIOP class
    files) that come bundled with the latest version of the Netscape
    Navigator browser, so that they don't have to be downloaded
    2. Figure out how to use ZIP files. Here's what I've read: "Since
    the
    introduction of Netscape Navigator 3.0, you can specify an
    uncompressed
    .zip file as an addition to the code base of your application. By
    specifying a ZIP file, the browser will load your applet's classes
    from
    a specified ZIP file before it searches the code base. This ZIP can
    improve applet download time by reducing the number of HTTP
    connections
    required to fetch applet code. As an added benefit, Netscape caches
    the
    single ZIP file so that it will not reload your applet unless the date
    of the ZIP file has changed."
    3. Figure out how to use JAR files. Here's what I've read: "JAR
    stands for Java archive. It's a file format based on the popular ZIP
    file format and is used for aggregating many files into one. Although
    JAR can be used as a general archiving tool, the primary motivation
    for
    its development was so that Java applets and their requisite
    components
    can be downloaded to a browser in a single HTTP transaction, rather
    than
    opening a new connection for each piece. This greatly improves the
    speed with which an applet can be loaded onto a web page and begin
    functioning. The JAR format also supports compression, which reduces
    the
    size of the file and improves download time still further."
    Unfortunately, we've been unable to get any of these approaches to
    work.
    Has any one used these or other approaches to speed up applet
    download
    time? Or, does anyone know of consulting firms that specialize in
    this
    sort of thing?
    Thanks in advance for your help.
    Mike Nelson, Project Leader
    Metrix, Inc.
    [email protected]
    414-798-8560 x1157
    Billy L. Williams, Jr. | email: [email protected]
    Sage Solutions, Inc. | Tel: (415) 392-7243 (x506) Fax: (415) 391-3899
    | Pager: (415) 605-1791 (page me if urgent)

    Hi Michael,
    We have done exactly what you describe and have avoided the slow applet
    download times. Although it can be a bit tricky, it is possible to use
    the ORB bundled inside the Netscape 4.0 browser (Visibroker for Java by
    Visigenic). Most of the code should follow Netscape's examples (on
    http://developer.netscape.com)--just remember to initialize the ORB by
    passing a reference to the current applet in orb_init() (so that you
    invoke something like orb_init(this) [assuming you are extending
    java.applet.Applet]). Pulling up the Java console within your web
    browser should help debug quite a bit (a lot of debug messages will get
    printed there the ORB is having problems).
    Netscape has just implemented the applet caching schemes you describe,
    so it probably shouldn't matter too much if you use another vendor's
    ORB (we've done this with Iona's OrbixWeb). If you use ZIP files, they
    have to be uncompressed, and I don't think that the browser will cache
    them between browser sessions. Netscape 4.0 does seem to handle
    compressed JAR files just fine and it does indeed cache them between
    browser sessions. I'd go with the JAR format anyway since the ZIP
    bundling was just a workaround until Sun got their act together in the
    1.1 JDK.
    By the way, you also might want to take advantage of the code-signing
    and capabilities APIs of Netscape if you are going to invoke methods on
    objects not resident on your web server. Otherwise, you will probably
    run into the (in)famous browser applet security restrictions and you may
    have other problems doing things like callbacks from Forte, etc.
    If you want more detail on how it works, let me know and I can post some
    examples.
    Oh, one last thing: we are a consulting firm specializing in these kinds
    of things :)
    Bill
    Subject: Java Applet IIOP Call-In with Release 3C--How do we speed up download time.
    Date: Wed, 2 Jul 1997 09:10:31 -0500
    From: Michael Nelson <[email protected]>
    To: "'[email protected]'" <[email protected]>
    We have successfully implemented a simple Java Applet that calls into
    Forte Services via IIOP. However, the duration of the download time
    for
    Applet and its required class files is UNACCEPTABLE in a typical
    INTERNET environment where 28.8K modems and multiple hops around the
    net
    are not uncommon. We dialed into our network at 28.8K (but no
    hopping),
    and found that download times varied from 1.5 - 2.0 minutes. This is
    unacceptable, even by internet standards. We have been using the
    Visigenic Visibroker product as the ORB.
    After doing some investigation, we've come up with several ideas to
    speed up download time:
    1. Figure out how to use the Visigenic components (CORBA/IIOP class
    files) that come bundled with the latest version of the Netscape
    Navigator browser, so that they don't have to be downloaded
    2. Figure out how to use ZIP files. Here's what I've read: "Since
    the
    introduction of Netscape Navigator 3.0, you can specify an
    uncompressed
    .zip file as an addition to the code base of your application. By
    specifying a ZIP file, the browser will load your applet's classes
    from
    a specified ZIP file before it searches the code base. This ZIP can
    improve applet download time by reducing the number of HTTP
    connections
    required to fetch applet code. As an added benefit, Netscape caches
    the
    single ZIP file so that it will not reload your applet unless the date
    of the ZIP file has changed."
    3. Figure out how to use JAR files. Here's what I've read: "JAR
    stands for Java archive. It's a file format based on the popular ZIP
    file format and is used for aggregating many files into one. Although
    JAR can be used as a general archiving tool, the primary motivation
    for
    its development was so that Java applets and their requisite
    components
    can be downloaded to a browser in a single HTTP transaction, rather
    than
    opening a new connection for each piece. This greatly improves the
    speed with which an applet can be loaded onto a web page and begin
    functioning. The JAR format also supports compression, which reduces
    the
    size of the file and improves download time still further."
    Unfortunately, we've been unable to get any of these approaches to
    work.
    Has any one used these or other approaches to speed up applet
    download
    time? Or, does anyone know of consulting firms that specialize in
    this
    sort of thing?
    Thanks in advance for your help.
    Mike Nelson, Project Leader
    Metrix, Inc.
    [email protected]
    414-798-8560 x1157
    Billy L. Williams, Jr. | email: [email protected]
    Sage Solutions, Inc. | Tel: (415) 392-7243 (x506) Fax: (415) 391-3899
    | Pager: (415) 605-1791 (page me if urgent)

  • Call library with struct as parameter - several problems

    Hi everyone,
    I'm trying to send a MIDI sysex message to a midi device through winmm.dll using MidiOutLongMsg. I have trouble figuring out how to pass the parameters right.
    I need to call three functions (midiOutPrepareHeader, midiOutLongMsg, midiOutUnprepareHeader), all of them having the same form
    MMRESULT midiOutPrepareHeader(
    HMIDIOUT hmo,
    LPMIDIHDR lpMidiOutHdr,
    UINT cbMidiOutHdr
    where HMIDIOUT hmo is a handle that I have already. Troubling me are the other two parameters. cbMidiOutHdr is the size (in bytes) of the struct lpMidiOutHdr. This is a struct of the form
    typedef struct {
    LPSTR lpData;
    DWORD dwBufferLength;
    DWORD dwBytesRecorded;
    DWORD_PTR dwUser;
    DWORD dwFlags;
    struct midihdr_tag far * lpNext;
    DWORD_PTR reserved;
    DWORD dwOffset;
    DWORD_PTR dwReserved[4];
    } MIDIHDR;
    (Struct: http://msdn2.microsoft.com/en-us/library/ms711592.aspx
    PrepareHeader http://msdn2.microsoft.com/en-us/library/ms711634.aspx
    SendMessage http://msdn2.microsoft.com/en-us/library/ms711629.aspx
    UnprepareHeader http://msdn2.microsoft.com/en-us/library/ms711641.aspx)
    [Note: The full code for what I want to do can be found here http://www.borg.com/~jglatt/tech/lowmidi.htm (section "outputting system exclusive MIDI messages) - basically I need a translation of this code to LabView.]
    The following are my problems:
    a) How do I emulate a struct in LabView? (other threads suggest that this is done by clusters)
    b) How do I pass a pointer to a struct (cluster?) to a DLL?
    c) If I can use a cluster for this struct, how do I represent the LPSTR lpData in the cluster, i.e., a pointer to my data?
    d) how do I get the struct size for cbMidiOutHdr?
    This is how far I got, lots of it with the help of several threads in this forum:
    a) use a LabView cluster
    b) use "adapt to type" in the dll call (couldn't get this to work)
    c) I use a type cast on my string in the hope that what it returns is the register address (and I'm probably superwrong here)
    d) my cluster consists of 9 elements of 4 byte datatypes, so I just use 36 for cbMidiOutHdr
    The dll seems to be happy with the way I pass the cluster - I get error codes of 0 in both the PrepareHeader and UnprepareHeader functions. However, sending doesn't work (error code 7). Guessing that the type cast returns a pointer, I have also cast the cluster to an Int32 and passed that parameter as pointer to numeric value. Interestingly, the PrepareHeader and UnprepareHeader functions are still happy, but I get a different error code from the sending (code 11)
    Most of what I've done so far is guesswork, and I'm out of guesses now. I've attached the code to this post (it uses VIs from the NI MIDI example library ftp://ftp.ni.com/pub/devzone/epd/midi-example.llb ). I'd appreciate any help with this. Thanks!
    Attachments:
    Write MIDI SysEx Message.vi ‏21 KB

    First off, this problem doesn't have anything to do with control references; those have meaning only inside of the LabView environment.
    My first suggestion is to look for a higher-level library that will do whatever MIDI function you are trying to call. If you can find an ActiveX or .NET object that will control the MIDI subsystem, I recommend that you use it instead since it will be a lot easier.
    If calling the DLL directly is the best option (and calling DLLs is absolutely the way to go when you need high performance) then you need to understand how LabView passes data to library functions. That is described here:
    http://zone.ni.com/reference/en-XX/help/371361D-01/lvexcodeconcepts/configuring_the_clf_node/
    As you can see there are a lot of ways to pass data, but they boil down to this: LabView can pass, via various levels of dereferencing, a pointer to some [mostly] flat data. Things are easiest when your DLL mimics LabView's own data storage methods. For example, wiring a cluster into a node set with Adapt to Type passes a handle (struct**, pointer to pointer to [mostly] flat data). So if you are writing your own DLL, it's pretty easy to write something that works nicely with LabView data (e.g., strings with 4-byte length headers, self-describing arrays) and in fact the result is cleaner looking than its "pure C" variant because of the self-describing arrays and string length prefixes. (I say "mostly" flat because LabView clusters with variable-length elements aren't stored in a flat format.)
    When it comes to matching someone else's API things get harder, and in this case you are out of luck; you are going to have to write a LabView-callable wrapper function in C because LabView can't mimic the exact data structure needed. The problem is not the struct; there is a sneaky way to pass a pointer (vs a handle) to a struct, which is to do this:
    Generate a cluster in LabView representing the struct (atomic numeric data only! no strings arrays etc!)
    Flatten to string using native byte order.
    Convert string to byte array.
    Configure the call library function note to accept a pointer to an unsigned byte array. (NOT a C-string as suggested at the bottom of the page in the link above; your data may have internal 0x00s, and it certainly doesn't need an extra 0x00 at the end!)
    The reason this works is that a pointer is just an address; as long as all the right bytes are in memory in the right order starting at that address, all is well. The DLL doesn't know that LabView thinks it is passing a pointer to an array of bytes, it just gets the pointer to the first byte and it reads and interprets those bytes according to its own struct def. Reverse the process cooming back from the DLL (convert byte array to string, unflatten from string against the LV cluster.) This method will work for any flat struct.
    In LabView 8.5 there may be a less bogus way of doing this, which is to pass the cluster in with Adapt to Type and select "Array Data Pointer" as the format. This is new and I haven't tried it.
    But in your case, you want to point to a struct that contains a pointer to a string plus some numeric data and another pointer, and this you can't do directly. LabView does not expose the location of a string to you anywhere outside the Call Library Function node, so there's no way to "find the pointer" to a LabView string from outside the DLL. What you need to do in this case is write a wrapper function in C that takes your LabView data. Only then will LabView "tell you where the bytes are" and promise not to fiddle with them until the library call is complete. Once you are in C-land, you can throw pointers around to your heart's content. As long as you do it all perfectly, all will be well. (If you write one byte too many on output, boom! :-)
    There are a few ways to do this. You could make a cluster that has meaning in LabView, e.g. replace lpData with a LabView string, then pass the cluster in to your wrapper function set to "Adapt to Type"; that will pass a handle to the cluster. You can generate the .c file from the Call Lib Fuction, and it will outline where the data is.
    Complications: In this case it's your job to convert the handle to the labview string (which has 4 bytes of length as a prefix and no trailing 0x00) to a C-string by malloc()'ing a new buffer and memcopying the string out. There might be something in the LV CIN tools that does this, I'm not sure. Make sure you release the new string after the MIDI call.
    The lazy route (which is what I would do) is pass the string as the first arg and all of the numeric stuff as the second arg, leaving the space for lpData as you have now. (I don't know what struct "midihdr_tag" is, but if that's not something you were passed in a previous call, you'll need to add a third argument for that cluster and treat it similarly.) Then you can tell LabView that it should pass the string arg as a C-string pointer. Inside your wrapper, extract the pointers and stuff them into the data structure as needed. Dereference once (to go from handle to pointer) and make the MIDI call. To be clean, put everything back where it was before in the cluster; in particular don't believe you can pass out lpData* and do whatever you want with it in LabView; LabView will release/change that address as soon as you leave the output string unwired or do anything to it (e.g. concatenate.) You'll be creating a new string buffer and a new pointer on your next MIDI call.
    All of this complication is a result of a) LabView's hiding the details of memory allocation/deallocation from you and b) LabView's internal data structures being a bit different from C conventions (e.g. LabView strings vs. C strings). The second means that even when LabView is using non-flat data structures (e.g. cluster containing an array), you can't just blindly pass them along to a C function and expect it to work right. It would be nice if NI would write a little mini-compiler into the Call Library Function that would do what our wrapper function is going to do, but that's probably a fairly significant project. 
    Still, each function wrapper is only going to have about 10 lines of C. You can put wrappers for all the MIDI functions you want to call into a single DLL, then ship that DLL with your app.
    (Now you see why I suggested you look for an ActiveX MIDI control!)
    -Rob Calhoun

  • Why won't my printer print with Windows 8?

    Why won’t my printer print with Windows 8?
    Have you just upgraded, or purchased a new computer with Windows 8, and now you can’t get your printer to work?  If so, this may help you.  A lot of people have questions about installing their printer on a new OS.  This will help you answer those questions and make sure that you get everything installed. 
    Before You Start
    Before you try to install the printer on a Windows 8 computer, you should check to make sure the printer is compatible with the new OS.  The link below will give you a list of the printers that will work in Windows 8.
    http://h10025.www1.hp.com/ewfrf/wc/document?docname=c03168175&lc=en&cc=us&destPage=document&dlc=en
    If you have upgraded your computer to Windows 8 form another version of Windows, make sure to completely uninstall all of the software for your printer.  It should still print, but to use all the functions you will need to reinstall the software, if it’s available.
    Another thing to consider is how you want to connect the printer to the computer. 
    USB.  You should make sure that you have a USB cable that is no longer than 6 ft. (roughly 2m).  Make sure to connect the printer directly to the computer.  Do not use a USB hub. 
    Ethernet cable.  Make sure you have the network setup, that you have a free cable port on the router, and that you have an Ethernet cable available.
    Wireless.  You should make sure that you have the wireless network setup, and that you have the password for the wireless network. 
     1.     Installing Via USB
    Installing via USB in Windows 8 has become much simpler for HP printer users.  In other versions of the Windows OS you had to start the installation and wait for it to ask you for the USB connection.  If you didn’t, you would have to uninstall the printer from the Printers/Devices folder, and then start the install.  In Windows 8, that will not be a problem.  If you plug the printer’s USB cable in and then install the printer’s software, it will still work.  Now for in depth instructions on installing the printer via USB click the link below.
    http://h10025.www1.hp.com/ewfrf/wc/document?docname=c03460670&tmp_task=solveCategory&cc=us&dlc=en&la...
    2.     Installing Via an Ethernet Network Connection
    For an Ethernet network connected printer the install is amazingly simple.  All you have to do is connect the printer to the network.  Once you have that done, Windows 8 will automatically install the drivers for you.  Then, all you have to do is install the rest of the software, if it’s available.  It’s really that easy.
    http://www8.hp.com/us/en/support-drivers.html
    3.     Installing Via a Wireless Network Connection.
    For a wireless network connected printer the install is amazingly simple as well.  All you have to do is connect the printer to the network.  Once you have that done, Windows 8 will automatically install the drivers for you.  Then, all you have to do is install the rest of the software, if it’s available.  It’s pretty much the same as an Ethernet install, just wireless.
    http://www8.hp.com/us/en/support-drivers.html
    Alternate Install Methods
    With Windows 8, many printers’ drivers are installed with the OS.  These are known as InOS drivers, since they come built into the operating system.  If you have one of those printers, all you should have to do is connect it to the computer via USB, or connect it to the network via Ethernet or wireless.  Once you have that done Windows will handle the rest.  There are alternate methods of installing your printer if the normal methods are not working for some reason.  You can install the printer either using the Printer Install Wizard, or through Windows Updates. 
    Printer Install Wizard:
    http://h10025.www1.hp.com/ewfrf/wc/document?docname=c02681060&tmp_task=solveCategory&cc=us&dlc=en&la...
    Windows Update:
    http://h10025.www1.hp.com/ewfrf/wc/document?docname=c03460648&tmp_task=solveCategory&cc=us&dlc=en&la...
    Note: The Laserjet drivers for the Asia-Pacific and Japan won’t be released until a later date.  Check the support site linked below for driver availability.  I will update this post once they become available.
    http://www8.hp.com/us/en/support-drivers.html
    -------------How do I give Kudos? | How do I mark a post as Solved? --------------------------------------------------------
    This question was solved.
    View Solution.

    Hope this answers some questions.  
    -------------How do I give Kudos? | How do I mark a post as Solved? --------------------------------------------------------

  • Exception calling "Update" with "0" argument(s): "To add an item to a document library, use SPFileCollection.Add()"

    Hi i am trying to add a new item and update existing field value in a document library with powershell 
    but i receive below error message.
    PS C:\Users\spfarm> C:\Scripts\add.ps1
    Exception calling "Update" with "0" argument(s): "To add an item to a document
    library, use SPFileCollection.Add()"
    At C:\Scripts\add.ps1:24 char:16
    + $newItem.Update <<<< ()
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException
    #Add SharePoint PowerShell Snapin which adds SharePoint specific cmdlets
    Add-PSSnapin Microsoft.SharePoint.PowerShell -EA SilentlyContinue
    #Variables that we are going to use for list editing
    $webURL = "http://tspmcwfe:89"
    $listName = "test"
    #Get the SPWeb object and save it to a variable
    $web = Get-SPWeb $webURL
    #Get the SPList object to retrieve the "Demo List"
    $list = $web.Lists[$listName]
    #Create a new item
    $newItem = $list.Items.Add()
    #Add properties to this list item
    $newItem["Title"] = "My second item!"
    $newItem["Info"] = "s15"
    #Update the object so it gets saved to the list
    $newItem.Update()
    $web.Dispose()
    adil

    Hi Adil,
    Document Library is different from a normal list. The document library contains files inside it. You need to update the code to add a document to the library. Then you can get hold of the List Item represented by that file and update its properties. Here
    is an example:
    $WebURL = "http://aissp2013/sites/TestSite"
    $DocLibName = "Docs" 
    $FilePath = "c:\blogs.txt" 
    # Get a variable that points to the folder 
    $Web = Get-SPWeb $WebURL 
    $List = $Web.GetFolder($DocLibName) 
    $Files = $List.Files
    # Get just the name of the file from the whole path 
    $FileName = $FilePath.Substring($FilePath.LastIndexOf("\")+1)
    # Load the file into a variable 
    $File= Get-ChildItem $FilePath
    # Upload it to SharePoint 
    $spFile = $Files.Add($DocLibName +"/" + $FileName,$File.OpenRead(),$false) 
    $item = $spFile.Item
    $item["Title"] = "New Title"
    $item.Update()
    $web.Dispose()
    Blog | SharePoint Learnings CodePlex Tools |
    Export Version History To Excel |
    Autocomplete Lookup Field

Maybe you are looking for

  • Come on Apple - this is not enough!

    Come on Apple - this account mess has to be streamlined! Really! My setup: 3 different Macs, 2 iPhones, one iTunes Library, my wife, me. We both use all 3 Macs and have our own accounts on each machine. We have both our own MobileMe account. (Wife ha

  • SCCM 2012 SP1 - OS Deployment - hash could not be matched for the downloded content

    I've got a newly deployed SCCM 2012 SP1 running on Windows Server 2012. The W2K12 runs as vm on ESX 5.1. I'm having very odd issues with OS deployment. The TS keeps failing when processing SCCM client installation - it downloads the package but then

  • What cable to use for this?

    I am trying to hook up my xbox 360 to my Macbook pro, and I am unsure of what cable to use for this. Composite cables.

  • Does the Browser cach the jnlp-file?

    I have a problem, I think with the browser's caching. As I modify the *.jnlp-File, the old version is loaded, not the new one! Or is the old version cached by the webStart-Caching-Mechanism? To update the jnlp-file, sometimes it is helpful to clear t

  • Preservation of connections prior to upgrade from v9.3.x to v11.1.2

    Hello again SV Gurus out there!! I am contemplating upgrading the Smart View add-in on my PC from v9.3.1.6 to v11.1.2 and since I have quite a few connections already set up against our Prod and Non Prod environments, I would like to know whether it