Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Using External Code in LabVIEW.pdf
Скачиваний:
49
Добавлен:
29.05.2015
Размер:
1.85 Mб
Скачать

Chapter 2 Shared Libraries (DLLs)

Metrowerks CodeWarrior on Power Macintosh

Create a shared library using the process that the Metrowerks documentation describes. To use this shared library with LabVIEW, you must set struct alignment to 68k in the PPC Processor settings panel. Be sure to export the function(s) that you want to call from LabVIEW.

Calling External APIs

It is frequently desirable to access external APIs from within LabVIEW code. Most often, a LabVIEW programmer accesses external APIs to obtain functionality that the operating system provides. Normally, you can use the LabVIEW Call Library Function object to accomplish this goal. You must provide the following information to the Call Library Function.

Function name as it appears in the library

Function prototype

Library or module in which the function resides

Calling conventions of the function

Thread-safe status of the function

Common Pitfalls with the Call Library Function

The function reference documentation for any API should provide most of the information that Call Library Function requires. However, you should keep in mind the common errors listed in this section.

Incorrect Function Name

Your library call can fail when the name of the function as it appears in the library is different than is expected. Usually this error occurs due to function name redefinition, or to function name decoration, as in the following examples:

Redefinition—This pitfall appears when an API manufacturer uses a define mechanism, such as #define directive in ANSI C, to define an abstracted function name to one of many functions present in the library, based on some external condition such as language or debug mode. In such cases, you can look in the header (.h) file for the API to determine whether a #define directive redefined the name of a function you want to use.

Function Name Decoration—This pitfall appears when certain functions have their names decorated when they are linked. A typical C compiler tracks name decoration, and when it looks for a function in

Using External Code in LabVIEW

2-14

www.ni.com

Chapter 2 Shared Libraries (DLLs)

a shared library, it recognizes the decorated name. However, because LabVIEW is not a C compiler, it does not recognize decorated names. If you suspect that function name decoration is causing difficulty, inspect the shared library’s exported functions. In LabVIEW 6.0, the

Function Name control in the Call Library Function dialog box is a pull-down list where you can access a list of all functions within the library you have selected. In addition, most operating systems have a utility you can use to view a library’s exports, for example, QuickView on the Windows operating system and the nm command on most UNIX systems.

Data Types

Your library call can fail when you do not use the correct data types. LabVIEW only supports basic numeric data types and C strings. Also, you can select Adapt to Type in the Type control of the Call Library Function dialog box and direct LabVIEW to pass its own internal data types for a given parameter. You might encounter the following specific problems:

Non-Standard Data Type Definitions—Frequently, other APIs use non-standard definitions for data types. For example, instead of using char, short, and long, the Windows API uses BYTE, WORD, and DWORD. If an API that you are using makes use of such data types, you need to find the equivalent basic C data type so that you can properly configure the Call Library Function object. The Example 3: Call the Win32 API section presents an example of this process.

Structure and Class Data Types—Some APIs have structure and, in the case of C++, class data types. LabVIEW cannot use these data types. If you need to use a function that has a structure or class as an argument, you should write a CIN or shared library wrapper function that takes as inputs the data types that LabVIEW supports and that appropriately packages them before LabVIEW calls the desired function.

Constants

Your library call can fail when your external code uses identifiers in place of constants. Many APIs define identifiers for constants to make the code easier to read. LabVIEW must receive the actual value of the constant, rather than the identifier that a particular API uses. Constants are usually numeric, but they may also be strings or other values. To identify all constants, inspect the header file for the API to find the definitions. The definition may either be in #define statements, or in enumerations, which

© National Instruments Corporation

2-15

Using External Code in LabVIEW

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]