還有很多人不知道如何設定一個DLL呼叫不同的功能,今天說的是透過入口函式引數值進行設定。還有一種方法是使用UF_MB.h裡面的函式也可以實現,今天先說一種,具體看程式碼。
1 //============================= 2 // 一個DLL設定多個按鈕操作的方法 3 //============================= 4 // Mandatory UF Includes 5 #include <uf.h> 6 #include <uf_object_types.h> 7 #include <uf_draw.h> 8 #include <uf_part.h> 9 #include <uf_ugmgr.h> 10 #include <uf_ui.h> 11 #include <uf_obj.h> 12 #include <uf_drf.h> 13 14 // Std C++ Includes 15 #include <iostream> 16 #include <sstream> 17 #include <vector> 18 #include <string> 19 #include <algorithm> 20 #include <tchar.h> 21 #include <atlconv.h> 22 #include <shellapi.h> 23 24 #include <windows.h> 25 #undef CreateDialog 26 #pragma comment(lib,"shell32.lib") 27 28 using namespace NXOpen; 29 using std::string; 30 using std::exception; 31 using std::stringstream; 32 using std::endl; 33 using std::cout; 34 using std::cerr; 35 36 static enum StringValue { 37 evNotDefined, 38 evStringValue1, 39 evStringValue2, 40 evStringValue3, 41 evStringEnd 42 }; 43 static std::map<std::string, StringValue> s_mapStringValues; 44 static void Initialize() 45 { 46 s_mapStringValues["HNMDL_TOOL251"] = evStringValue1; 47 s_mapStringValues["HNMDL_TOOL252"] = evStringValue2; 48 s_mapStringValues["HNMDL_TOOL253"] = evStringValue3; 49 s_mapStringValues["end"] = evStringEnd; 50 51 cout << "s_mapStringValues contains " << s_mapStringValues.size() << " entries." << endl; 52 } 53 54 55 extern "C" DllExport void ufusr( char *parm, int *returnCode, int rlen ) 56 { 57 try 58 { 59 UF_CALL(UF_initialize()); 60 61 Initialize(); 62 63 switch (s_mapStringValues[parm]) 64 { 65 case evStringValue1: 66 uc1601(parm, 1); 67 // 其他操作 68 break; 69 case evStringValue2: 70 uc1601(parm, 1); 71 // 其他操作 72 break; 73 case evStringValue3: 74 uc1601(parm, 1); 75 // 其他操作 76 break; 77 default: 78 uc1601(parm, 1); 79 // 其他操作 80 break; 81 } 82 83 UF_CALL(UF_terminate()); 84 } 85 catch (const NXException& e1) 86 { 87 UI::GetUI()->NXMessageBox()->Show("NXException", NXOpen::NXMessageBox::DialogTypeError, e1.Message()); 88 } 89 catch (const exception& e2) 90 { 91 UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, e2.what()); 92 } 93 catch (...) 94 { 95 UI::GetUI()->NXMessageBox()->Show("Exception", NXOpen::NXMessageBox::DialogTypeError, "Unknown Exception."); 96 } 97 } 98 99 extern "C" DllExport int ufusr_ask_unload() 100 { 101 return (int)NXOpen::Session::LibraryUnloadOptionImmediately;// 除錯用 102 //return (int)NXOpen::Session::LibraryUnloadOptionAtTermination;// 程式釋出用 103 //return (int)NXOpen::Session::LibraryUnloadOptionExplicitly; 104 }
相關簡介及函式截圖:
GIF動圖:
黃河遠上白雲間,一片孤城萬仞山。
羌笛何須怨楊柳,春風不度玉門關。
詩人初到涼州,面對黃河、邊城的遼闊景象,又耳聽著《折楊柳》曲,有感而發,寫成了這首表現戍守邊疆計程車兵思念家鄉情懷的詩作。
詩的前兩句描繪了西北邊地廣漠壯闊的風光。首句抓住自下(遊)向上(遊)、由近及遠眺望黃河的特殊感受,描繪出“黃河遠上白雲間”的動人畫面:洶湧澎湃波浪滔滔的黃河竟像一條絲帶迤邐飛上雲端。寫得真是神思飛躍,氣象開闊。詩人的另一名句“黃河入海流”,其觀察角度與此正好相反,是自上而下的目送;而李白的“黃河之水天上來”,雖也寫觀望上游,但視線運動卻又由遠及近,與此句不同。“黃河入海流”和“黃河之水天上來”,同是著意渲染黃河一瀉千里的氣派,表現的是動態美。而“黃河遠上白雲間”,方向與河的流向相反,意在突出其源遠流長的閒遠儀態,表現的是一種靜態美。同時展示了邊地廣漠壯闊的風光,不愧為千古奇句。