LabWindows/CVI Idea Exchange

Community Browser
Showing results for 
Search instead for 
Did you mean: 
Post an idea

I develop software for many older systems that can not be upgraded or are running windows embedded.  I just tried to create a new application and could not install it from my distribution.  I found out I had to go and edit the setup.ini.  NI Installer Requires Windows 10 64-Bit (Version 1507) or Newer.  I've been using CVI since the DOS days.  One of the advantages has always been that I could recompile and I generally didn't have to worry about Windows updates screwing up my software.  This change seems ridiculous all of a sudden.


Starting from CVI2019 previous selection modes are changed to operations made by pressing shift, alt, Ctr or some combination of them in addition to arrow keys or mouse movements. Even if some of the new features are more intuitive after a short training period, the line selection mode has been lost and in my opinion this is a pity.

At present the only ways to select text by lines line are a triple click on a line (for a single line) or pressing Home two times and Shift + down arrow key (for blocks of lines): this is considerably slower and less user friendly than before, when simply pressing Shift+down arrow key was enough to select two or more entire lines.

So please bring back line selection mode in the source code editor!


BTW, line selection mode is still listed as an option in the help for Edit >> Paste command but unfortunately this is a lost feature.



I am wondering if it would be useful to redefine the CVI callbacks using the const type qualifier to remind users that the parameters are read only, a strategy I use for all of my own function declarations as an extra safety measure.


E.g., instead of the current situation


int CVICALLBACK PanelResponse (int handle, int event, void *callbackdata, int eventdata1, int eventdata2)


have it declared as


int CVICALLBACK PanelResponse (const int handle, const int event, const void *callbackdata, const int eventdata1, const int eventdata2)


When you have a function to install a callback, for example InstallMainCallback, NewAsyncTimer, InstallComCallback, viInstallHandler, DAQmxRegisterDoneEvent, DAQmxRegisterEveryNSamplesEvent, DAQmxRegisterSignalEvent, etc... it would be nice if the prototype was inserted directly in the source code by pressing Ctrl-D like for variables. Currently you have to open the documentation and do some copy/pasting.

Where does NI stand on this????

NI no longer supports 32 bit OS, but hasn't ported their own toolkit to x64. Since NI is NOT committed to developing (or even maintaining) CVI toolkits, how about open sourcing these so that users and the community can move these forward.

Adding a example code in CVI for CAN FD in CVI is very important for the customers , sending a CAN FD frames in CVI is not as easy as labview , it requires deep knowledge of pointers .

Please include example for sending different payloads like 8, 12, 20, 24, 64.



I think it would useful to allow for a progress bar control type in a cell of a table.


This could be done manually by loading different canned images into the cell, which would be stills of a progress bar in motion.  But that's cludgey.

Dear NI

I want to measure the time interval between the start signal and the stop signal.The time interval is about 2 to 3 minutes.Start signal and stop signal are collected from Ni usb-6509,There are 16 channels in total。I want to use Labwindows CVI for this purpose。What should i do?Should I use 16 threads for timing or 16 timers for timing?

I love my CVI, but come on.  How great would it be to be able to debug your project inside VSCode?

Now I have done this function to do it, you surely can do it better with extended error detection.



void CmtWriteTSQDataInFirstPosition(CmtTSQHandle Queue_Handle, const void *Buffer, size_t Number_of_Items, int Timeout_ms, int *Number_of_Items_Flushed)
	CmtTSQHandle Queue_Handle_Temp = {0};
	const void *BufferTemp = {0};

	size_t ItemsInQueue = {0};
	size_t ItemsSize = {0};
	CmtGetTSQAttribute (Queue_Handle, ATTR_TSQ_ITEMS_IN_QUEUE, &ItemsInQueue);
	CmtGetTSQAttribute (Queue_Handle, ATTR_TSQ_ITEM_SIZE, &ItemsSize);

	CmtNewTSQ(ItemsInQueue + Number_of_Items, ItemsSize, 0, &Queue_Handle_Temp);
	CmtWriteTSQData (Queue_Handle_Temp, Buffer, Number_of_Items, Timeout_ms, NULL);
	BufferTemp = calloc(ItemsInQueue, ItemsSize); 
	while(ItemsInQueue > 0)
		int CmtStatusOrItemRead = {0};
		CmtStatusOrItemRead = CmtReadTSQData (Queue_Handle, BufferTemp, ItemsInQueue, 0, 0);
		CmtWriteTSQData (Queue_Handle_Temp, BufferTemp, CmtStatusOrItemRead, Timeout_ms, NULL);
		ItemsInQueue -= CmtStatusOrItemRead;
	BufferTemp = 0;

	CmtGetTSQAttribute (Queue_Handle_Temp, ATTR_TSQ_ITEMS_IN_QUEUE, &ItemsInQueue);
	CmtGetTSQAttribute (Queue_Handle_Temp, ATTR_TSQ_ITEM_SIZE, &ItemsSize);
	BufferTemp = calloc(ItemsInQueue, ItemsSize); 
	while(ItemsInQueue > 0)
		int CmtStatusOrItemRead = {0};
		CmtStatusOrItemRead = CmtReadTSQData (Queue_Handle_Temp, BufferTemp, ItemsInQueue, 0, 0);
		CmtWriteTSQData (Queue_Handle, BufferTemp, CmtStatusOrItemRead, Timeout_ms, Number_of_Items_Flushed);
		ItemsInQueue -= CmtStatusOrItemRead;
	BufferTemp = 0;



Other editors allow you to include a file called .editorconfig in a codebase that enforces styles rules (indentation, tab characters, new-line characters, and so on).


It would be nice to have something like that. Personally, I'd like to enforce:

- Convert tabs to space

- number of spaces per tab

- Automatically convert .uir to .tui


I'm sure there are many other possibilities.



In 2015 and 2017 CVI, the horizontal scroll wheel of the mouse was working.


In 2019, the horizontal scroll wheel is not working now.

Since we don't have all extra-wide/extra-size screen, it is a very important feature we are missing.
The shift/alt or even the vertical scroll wheel of the mouse on the horizontal scroll bar does only vertical movement.

I'm strongly interested in getting back a feature that has already been removed with CVI2013. Until last week, I had good old CVI9.0.1 installed on my PC which was perfect for maintaining my biggest project, a SW tool that has more than 50DLLs around a single executable for controlling lots of devices using a script interpreter for fully flexible process flows.

Some of these DLLs even have cross-references. When modifying a header file that is not only included in the current project but also in other projects of the workspace, I used to see red flagged files in the affected projects to tell me the need of these to be recompiled.

This was really, really helpful to keep the overview!

Unfortunately this feature I don't see anymore in CVI2019 which leads to the fact that I have to either create/maintain a separate list for all external references or the necessity of walking through all projects in my workspace and compile them without knowing the necessity.

Both variants are very uncomfortable and an enormous waste of time in my daily work.


I know that this subject has already been refused some time ago, but I really want to encourage you rethinking this "not only nice to have".

I hope you understand my situation.


Thanx for supporting. CVI is great and I'm using it since more than 17years!




When we are on a string variable in the debugger (for instance in the Variables window or the Watch window or the Array View window), there is currently no way to copy or paste the content of said string. It would be nice to have this basic capability.

Moving from CVI 2017 to 2019, I really miss the feature where, in 2017, if the editor cursor was placed within the confines of any variable name, uses of that variable would be highlighted in all the locations it is being used on the display. With 2019 that same feature exists, but you now have to select the entire name of the variable as opposed to just having the single cursor within the confines of the variable name. It really slows things down for me.


I still use 2017 a lot of times for that reason, along with the lack of a line delineating the editor proper from the breakpoint diamond vertical area. I can't count how many times I've clicked and defined a breakpoint when all I wanted to do was have the editor cursor to the full left of the display. Argh E10!

Dear NI,

Until lately I worked with CVI 2017. I've decided to move on and I have installed 2019. For years I use NIReport 

to create reports to the customers. To my astonishment, NIReport is no longer supported, meaning a work of years will be thrown away. I have tried other options provided by NI, such as creating a report in word/excel, but neither gave me  satisfactory results

I am developing applications in CVI for 15 years, and had NEVER a problem of backward compatibility. I know other companies  that do not care about their customers, but NI has been never the case.

I hope that NIReport will be back. 

thank you


It would be great if one could define two colors for user functions, one color for functions declared local to a .c source file, and another color for functions declared globally like in a .h header file or linked file. User-functions are visually the same as all others, black text. Ugh.

If it's too much of a non-compiled linking challenge to apply, at least allow the user to select a section of working code text and change the font color by hand to get to the same place. Being able to change a text chunk background color would be great too. That would be of help to allow the programmer to, say, highlight sections of code that need later work, items for tomorrow, passing along working code to colleagues, etc. 

At the moment the maximum panel and control name length is limitted to 32, if you set them programmatically.


Because of longer customer system signal names it is not possible to use them directly as control names. If the maximum length could be raised to 64 or to the maximum label length, it would help to avoid to generate new control names and the additional mapping between costumer system signal names and the generated control names in the test environment.

When editing a panel, you can locate every control in the User Interface Browser at the top right corner of the editor window. In order to highlight some elements in the panels/controls tree, you can collapse all elements and expand only the panel you are interested to. Not exactly a fast and easy process but useful in case of complex UIR files with several panels embedded (and the only way I have found to look at control arrays and their included controls). So far so good.

But if you happen to switch to another window, possibly to revise some code that references the controls you have elaborately selected, and then come back to the UIR editor you will find the UI Browser has reverted to fully expanded and the control you were looking at previously is not event the selected one! That is to say, you've lost all the time spent in tailoring the tree Smiley Mad

In my opinion the UI Browser should retain its state when you switch to another window so that what you were working on is still visible on screen and you don't have to locate it again.

At present the IniFile instrument permits to read an existing .INI file, modify it and re-save it preserving existing comments in the file, if any. It would be a great addition to permit to programmatically add comments to sections and/or items.


I have a rather complex application with several optional modules that can be added or tailored by setting appropriate items in a configuration file in .INI format. I have developed an application that helps me creating such configuration files with the proper elements added but if I want to add some comment for better documentation to the final user I need to manually add them after the file has been created with the risk of forgetting something: if I could add them while generating the configuration file I would avoid this risks.