⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvidemo.c

📁 使用ActiveX控件控制NI公司的Labwindows/CVI开发环境。
💻 C
📖 第 1 页 / 共 2 页
字号:
    if (hresult<0)
        MessagePopupCAError(hresult);
    if (retVal<0)
        MessagePopupCVIError(retVal);
    return 0;
}


//----------------------------------------------------------------------------
// RunProject
//----------------------------------------------------------------------------
int CVICALLBACK RunProject (int panel, int control, int event, void *callbackData,
    int eventData1, int eventData2)
{
    HRESULT hresult = S_OK;
    int     retVal = 0;

    switch (event) {
        case EVENT_COMMIT:
            // Run Project
            SetWaitCursor(1);
            hresult = CVI_AppRunProject (cviAutoObj, NULL, TRUE, &retVal);
            SetWaitCursor(0);
            if (retVal<0 || hresult<0)
                goto Error;
            break;
        }
Error:        
    if (hresult<0)
        MessagePopupCAError(hresult);
    if (retVal<0)
        MessagePopupCVIError(retVal);
    return 0;
}


//----------------------------------------------------------------------------
// CreateEXE
//----------------------------------------------------------------------------
int CVICALLBACK CreateEXE (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    HRESULT hresult = S_OK;
    int     retVal = 0;
    char    pathName[MAX_PATHNAME_LEN];
    
    switch (event) {
        case EVENT_COMMIT:
            // Create Standalone EXE
            hresult = CVI_AppSetProjectTargetType (cviAutoObj, NULL, CVIConst_CVI_TARGET_TYPE_EXECUTABLE, &retVal);
            if (retVal<0 || hresult<0)
                goto Error;
            retVal = FileSelectPopup ("", "*.exe", "*.exe", "Create Executable",
                VAL_SAVE_BUTTON, FALSE, FALSE, TRUE, TRUE, pathName);
            if (retVal == VAL_EXISTING_FILE_SELECTED ||
                retVal == VAL_NEW_FILE_SELECTED) 
            {
                hresult = CVI_AppSetProjectTargetPath (cviAutoObj, NULL, pathName, &retVal);
                if (retVal<0 || hresult<0)
                    goto Error;

                SetWaitCursor(1);
                hresult = CVI_AppCreateProjectTarget (cviAutoObj, NULL, &retVal);
                SetWaitCursor(0);
                if (retVal<0 || hresult<0)
                    goto Error;
            }
            retVal = 0;
            break;
        }
    return 0;    
Error:      
    if (hresult<0)
        MessagePopupCAError(hresult);
    if (retVal<0)
        MessagePopupCVIError(retVal);
    return 0;
}


//----------------------------------------------------------------------------
// ShutdownCVI
//----------------------------------------------------------------------------
int CVICALLBACK ShutdownCVI (int panel, int control, int event, void *callbackData,
    int eventData1, int eventData2)
{
    HRESULT hresult = S_OK;
    long     retVal = 0;
    ERRORINFO errorInfo;
    
    switch (event) {
        case EVENT_COMMIT:
            // Shutdown CVI Application
            hresult = CVI_AppExitCVI (cviAutoObj, &errorInfo, TRUE, &retVal);
            if ((hresult) || (retVal))
                goto Error;
            else 
            {   
                SetCtrlAttribute(panel, PANEL_LOADPROJECT, ATTR_DIMMED, 1);
                SetCtrlAttribute(panel, PANEL_VIEWSOURCE,  ATTR_DIMMED, 1);
                SetCtrlAttribute(panel, PANEL_RUNPROJECT,  ATTR_DIMMED, 1);
                SetCtrlAttribute(panel, PANEL_CREATEEXE,   ATTR_DIMMED, 1);
                SetCtrlAttribute(panel, PANEL_SHUTDOWNCVI, ATTR_DIMMED, 1);
                CA_DiscardObjHandle (cviAutoObj);
                cviAutoObj = 0;
            }    
            break;
    }
    return 0;
Error:      
    if (hresult<0)
        MessagePopupCAError(hresult);
    if (retVal<0)
        MessagePopupCVIError(retVal);
    return 0;
}


//----------------------------------------------------------------------------
// Quit
//----------------------------------------------------------------------------
int CVICALLBACK Quit (int panel, int control, int event, void *callbackData,
    int eventData1, int eventData2)
{
    switch (event) {
        case EVENT_COMMIT:
            QuitUserInterface (0);
            break;
    }
    return 0;
}


//----------------------------------------------------------------------------
// StatusTimer - Timer to poll the CVI IDE for its status
//----------------------------------------------------------------------------
int CVICALLBACK StatusTimer (int panel, int control, int event, void *callbackData,
    int eventData1, int eventData2)
{
    HRESULT hresult = S_OK;
    int retVal = 0;
    int compiled, intCompiled, waiting;
    enum CVIEnum_CVIExecutionState runState, intRunState;
    
    switch (event) {
        case EVENT_TIMER_TICK:
            if (cviAutoObj) 
            {
                hresult = CVI_AppGetCVIState (cviAutoObj, NULL, &compiled,
                    &runState, &intCompiled, &intRunState, &waiting, &retVal);
                if ((hresult) || (retVal))
                {    
                    cviAutoObj = 0;
                    SetCtrlAttribute(panel, PANEL_LOADPROJECT, ATTR_DIMMED, 1);
                    SetCtrlAttribute(panel, PANEL_VIEWSOURCE,  ATTR_DIMMED, 1);
                    SetCtrlAttribute(panel, PANEL_RUNPROJECT,  ATTR_DIMMED, 1);
                    SetCtrlAttribute(panel, PANEL_CREATEEXE,   ATTR_DIMMED, 1);
                    SetCtrlAttribute(panel, PANEL_SHUTDOWNCVI, ATTR_DIMMED, 1);
                    goto Error;    
                }   
                    
            }       
            else 
            {
                compiled = FALSE;
                runState = 0;
                waiting = FALSE;
            }
            SetCtrlVal (panel, PANEL_COMPILED, compiled);
            SetCtrlVal (panel, PANEL_RUNSTATE, runState);
            SetCtrlVal (panel, PANEL_WAITING, waiting);
            break;
        }
    return 0;        
Error:        
    if (hresult<0)
        MessagePopupCAError(hresult);
    if (retVal<0)
        MessagePopupCVIError(retVal);
    return 0;
}


//----------------------------------------------------------------------------
// MessagePopupCAError
//----------------------------------------------------------------------------
static void MessagePopupCAError(int status)
{
    char buffer[255];
    
    CA_GetAutomationErrorString (status, buffer, 255);
    MessagePopup("ActiveX Automation Error", buffer);
}    

//----------------------------------------------------------------------------
// MessagePopupCVIError
//----------------------------------------------------------------------------
static void MessagePopupCVIError(int status)
{
    char buffer[255];
    
    switch (status) {
        case 0           : strcpy(buffer, "NO_ERROR"                ); break;
        case -2147221503 : strcpy(buffer, "INVALID_PATHNAME"        ); break;
        case -2147221502 : strcpy(buffer, "PATHNAME_NOT_ABSOLUTE"   ); break;
        case -2147221501 : strcpy(buffer, "PATHNAME_IS_RELATIVE"    ); break;
        case -2147221500 : strcpy(buffer, "FILE_NOT_IN_PROJECT"     ); break;
        case -2147221499 : strcpy(buffer, "FILE_DOES_NOT_EXIST"     ); break;
        case -2147221498 : strcpy(buffer, "FILE_NOT_LOADED"         ); break;
        case -2147221497 : strcpy(buffer, "PROGRAM_RUNNING"         ); break;
        case -2147221496 : strcpy(buffer, "PROGRAM_SUSPENDED"       ); break;
        case -2147221495 : strcpy(buffer, "NO_PROGRAM_RUNNING"      ); break;
        case -2147221494 : strcpy(buffer, "NO_PROGRAM_SUSPENDED"    ); break;
        case -2147221493 : strcpy(buffer, "NO_RUNNING_OR_SUSPENDED" ); break;
        case -2147221492 : strcpy(buffer, "FILE_NOT_EXCLUDABLE"     ); break;
        case -2147221491 : strcpy(buffer, "NOT_A_LOADED_INSTRUMENT" ); break;
        case -2147221490 : strcpy(buffer, "NOT_A_C_FILE"            ); break;
        case -2147221489 : strcpy(buffer, "NOT_A_SRC_OR_TEXT_FILE"  ); break;
        case -2147221488 : strcpy(buffer, "CANNOT_CLOSE_WINDOW"     ); break;
        case -2147221487 : strcpy(buffer, "LINE_TOO_LONG"           ); break;
        case -2147221486 : strcpy(buffer, "OUT_OF_MEMORY"           ); break;
        case -2147221485 : strcpy(buffer, "WAITING_FOR_RESPONSE"    ); break;
        case -2147221484 : strcpy(buffer, "NOT_AN_FP_FILE"          ); break;
        case -2147221483 : strcpy(buffer, "FUNCTION_NOT_IN_FILE"    ); break;
        case -2147221482 : strcpy(buffer, "INVALID_FP_PARAM_INDEX"  ); break;
        case -2147221481 : strcpy(buffer, "ERROR_READING_FP_FILE"   ); break;
        case -2147221480 : strcpy(buffer, "ERROR_REPORTED_TO_USER"  ); break;
        case -2147221479 : strcpy(buffer, "INVALID_PROJ_FILE_INDEX" ); break;
        case -2147221478 : strcpy(buffer, "PROJECT_IS_UNTITLED"     ); break;
        case -2147221477 : strcpy(buffer, "NOT_A_PROJECT_FILE"      ); break;
        case -2147221476 : strcpy(buffer, "KEYSTROKE_OVERFLOW"      ); break;
        case -2147221475 : strcpy(buffer, "INVALID_KS_INTERVAL"     ); break;
        case -2147221474 : strcpy(buffer, "DEBUGGING_EXTERNAL"      ); break;
        case -2147221473 : strcpy(buffer, "IS_A_PROJECT_FILE"       ); break;
        case -2147221472 : strcpy(buffer, "FILE_NOT_PRINTABLE"      ); break;
        case -2147221471 : strcpy(buffer, "INVALID_TARGET_TYPE"     ); break;
        case -2147221470 : strcpy(buffer, "INVALID_FP_FUNC_INDEX"   ); break;
        case -2147221469 : strcpy(buffer, "NOT_DLL_PROJECT"         ); break;
        case -2147221468 : strcpy(buffer, "MULTI_DIM_ARRAY"         ); break;
        case -2147221467 : strcpy(buffer, "INVALID_SAFEARRAY"       ); break;
        case -2147221466 : strcpy(buffer, "INVALID_NULL_PARAM"      ); break;
        default          : strcpy(buffer, "Unknown Error"           ); break;
    }   
    MessagePopup("CVI Server Automation Error", buffer);
}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -