A .Net assembly contains an extensive type library resource that describes every object and its methods and global functions that assembly exports. It describes for each parameter the exact datatype, and if it is an array or string buffer its lifetime and minimum size requirements and together with the managed nature of .Net which defines how, and when a caller or function can and should allocate or deallocate a memory buffer, you can easily call any managed code as long as both caller and callee use the same managed contract. LabVIEW’s native datatype system is in fact managed too but predates .Net more than 10 years and Microsoft for some “strange” reason decided to develop their own managed environment. 😀
When you select a method name in a .Net node, LabVIEW retrieves the type library entry for that method from the assembly and creates often fairly involved code in the background to translate between its own managed memory space and the .Net managed system before the call and back after the method call returns. If the assembly programmer didn’t do any error when creating the type library this works usually perfect. But there is no such thing as a type library in normal C DLLs. The only thing you have is the header file and a hopefully extensive library documentation in the form of more or less comprehensible text document. But that is prosa text and not suited for automatic processing, not even by an Algorithmic Interpreter (AI).
C is the exact antithesis to a managed environment. Every library developer is free to use whatever fancy memory management system he likes and even use several different ones for different APIs because C is a language that tries to put as few limitations on both the C compiler builder and programmer as possible. Virtually anything that could be done with a CPU can be done in C! The C syntax consequently has not even as much as compiler hints about the memory management aspects of parameters because there would be several options and many more variations on them that are hard to formalize in a syntax without severely limiting those options (basically what managed is about).
The Import Library Wizard is simply a header file parser that understands the C syntax well enough to extract the fundamental information about the functions declared in that header. It’s quite a complex parser as the C syntax is fairly complex to decode, but it is not rocket science. I implemented my own in the past for a project. What it can’t do is invent information that is not in the C syntax itself. Text comments it has to ignore just as naming conventions in parameter names, because they are not formalized and seldom consistent, often not even in the same header file.