# GetExternalModuleAddr

GetExternalModuleAddr (int moduleID, const char name[], int *status);

## Purpose

Obtains the address of an identifier in a module you loaded using LoadExternalModule or LoadExternalModuleEx.

The identifier must be either a variable or function name defined globally in the external module.

If GetExternalModuleAddr succeeds, it returns the address of the variable or function in the module. If GetExternalModuleAddr fails, it returns NULL.

| Note For global variables exported by a DLL, you have to use the name of the import symbol. For example, if the DLL exports a variable global, you have to pass __imp_global. In this case GetExternalModuleAddr returns a pointer to a pointer to the variable. Even though you can access global variables exported by a DLL through GetExternalModuleAddr as described above, the preferred mechanism is to provide a pair of Set and Get functions.

### Example

void (*funcPtr) (char buf[], double dval, int *ival);
int module_id;
int status;
char buf[100];
double dval;
int ival;
char *pathname;
char *funcname;
pathname = "EXTMOD.OBJ";
funcname = "my_function";
module_id = LoadExternalModule (pathname);
if (module_id < 0)

FmtOut ("Unable to load %s\n", pathname);

else

{
funcPtr = GetExternalModuleAddr (module_id, funcname, &status);
if (funcPtr == NULL)

FmtOut ("Could not get address of %s\n", funcname);

else

(*funcPtr) (buf, dval, &ival);

}

## Parameters

Input
Name | Type | Description
moduleID | integer | The value returned by LoadExternalModule.
name | char [] | The name of the identifier whose address is to be obtained from the external module.
Output
Name | Type | Description
status | integer | The status of the call to GetExternalModuleAddr. If GetExternalModuleAddr succeeds, it sets this parameter to zero. If GetExternalModuleAddr fails, it sets this parameter to a negative error code.
Code | Description
0 | Success.
-1 | Out of memory.
-4 | Invalid file format.
-5 | Undefined references.
-8 | Cannot open file.
-9 | Invalid module ID.
-10 | Identifier not defined globally in the module.
-20 | DLL missing function; for example, a function is in the import library but not in the DLL.
-25 | DLL initialization failed, for example, DLL file not found.
-28 | In Borland mode, LabWindows/CVI does not allow external modules to contain uninitialized definitions of global variables that have already been defined.

## Return Value

Name | Type | Description
address | void * | Address of the identifier. If the return value is the address of a function that has a calling convention different from the default calling convention, you must include the calling convention in the declaration of the function pointer. Assume that the following function is declared in the external module: int __stdcall SetADouble (double d); If the default calling convention for this example is __cdecl, declare the function pointer as follows: int (__stdcall * SetADouble_FnPtr)(double d) = NULL;. To determine the default calling convention, select Options»Build Options in the Workspace window.