2.2.4.38.16 Project::FindFunctionFindFunction
Description
Find a function in the specified file and compile and link it as needed.
Syntax
Function FindFunction( LPCSTR lpcszFunctionName, LPCSTR lpcszFileName = NULL, BOOL bCompileDependents = false, BOOL bSuppressPromptBox = false, BOOL bCheckFileChange = false, int nOverloadIndex = 0, const FunctionPointer& funcRef = NULL )
Parameters
- lpcszFunctionName
- [input] Name of function to be called
- lpcszFileName
- [input]Optional input name of file, if NULL then \OriginLab\lpcszFunctionName.cpp is used
- bCompileDependents
- [input]Optional input causes dependent (included) files to be compiled and linked
- bSuppressPromptBox
- [input]true will hide the box that comes up when the needed function has not been compiled and Origin C compiler must be invoked
- bCheckFileChange
- [input]true will recompile source file if it was modified since last time it was loaded, false will not
- nOverloadIndex
- [input]If there is more than one function with same name, need to specify this index to get the correct function pointer.
- funcRef
- [input]Optional. If there is more than one function with same name, pass the FunctionPointer object as prototype reference to obtain correct function pointer.
Return
Returns a valid pointer to the found function on success and an invalid function pointer on failure.
Examples
EX1
// This code demonstrates how FindFunction may be used
// to make a function call by means of a function pointer
void AddColumns(Worksheet& wks, int nn)
{
if( wks )
{
for( int ii = 0; ii < nn; ii++ )
{
wks.AddCol();
}
}
}
typedef void (*FUNCTYPE)(Worksheet& wks, int nn);
void myFunction()
{
string strPath;
strPath.Format("%sOriginC\\OriginLab\\test.c", GetAppPath(TRUE));
Function fn = Project.FindFunction("AddColumns", strPath);
FUNCTYPE pfn = fn;
// Can also be done on one line:
//FUNCTYPE pfn = Project.FindFunction("AddColumns", strPath);
if( pfn )
{
Worksheet wks;
wks.Create();
pfn(wks, 5);
}
}
EX2
// following example can be found in OriginEvents.c
typedef bool (*FUNC_OCEVENTS)(DataRange &dr, int nWinType);
static void OnWksSelectionChange(DataRange &dr)
{
// can use relative path from OriginC subpath, also, file extention .c is assumed
Function fn = Project.FindFunction("OnSelChange", "OriginLab\\GlobalEvents");
FUNC_OCEVENTS pfn = fn;
if(pfn)
pfn(dr, EXIST_WKS);
}
EX3
// This is a complete example that shows how to call the import_file
// function defined in OriginLab's FileImport.c file.
#include <Origin.h>
typedef int (*ImportFileFuncPtr)(LPCSTR strPageName, int nIndexLayer,
LPCSTR lpcszDataFile, LPCSTR lpcszFilterName);
void import_file_to_active_layer()
{
// This example will import Origin's simple group.dat file.
string strDataFile;
strDataFile.Format("%sSamples\\Graphing\\group.dat", GetAppPath(TRUE));
// Get full path of the file containing the function definition.
string strPath;
strPath.Format("%sOriginC\\OriginLab\\FileImport.c", GetAppPath(TRUE));
// Find the function in the specified file and compile and link it
// and its dependencies.
ImportFileFuncPtr pfn = Project.FindFunction("import_file", strPath, true);
if( pfn )
{
Worksheet wks = Project.ActiveLayer();
if( wks )
{
WorksheetPage pg = wks.GetPage();
pfn(pg.GetName(), wks.GetIndex(), strDataFile, "ASCII.oif");
}
}
}
Remark
See Also
Project::FindClass
Header to Include
origin.h
|