linux下,boa生成的cgi进程调用
1 | system("reboot"); |
是失效的,解决办法是,另起一root身份的侦听进程A,此cgi进程给进程A发msg,通知进程A进行system("reboot")调用。
人,技术,生活。
linux下,boa生成的cgi进程调用
1 | system("reboot"); |
是失效的,解决办法是,另起一root身份的侦听进程A,此cgi进程给进程A发msg,通知进程A进行system("reboot")调用。
以下代码在VC2013中运行报错,但在VC2017中运行良好,应该是VC2013的CArray类有BUG。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <vector> #include <string> using namespace std; void CMFCApplication2Dlg::OnBnClickedButton1() { struct Tst01 { vector<string> t01; }; Tst01 tst01; tst01.t01.push_back("hi"); CArray<Tst01, Tst01> arry; for (int i = 0; i < 10; i++) { arry.Add(tst01); } for (int i = 0; i < 10; i++) { Tst01 &node = arry.GetAt(i); Tst01 nNode(node); // VC2013中此处报错 printf("big is %s.\n", nNode.t01[0].c_str()); } } |
最好的解决方案是:
1 | git clone https://github.com/utelle/wxsqlite3.git |
打开里面wxsqlite3\sqlite3secure\build目录下的对应VC工程文件,编译sqlite3shell项目,在wxsqlite3\sqlite3secure\bin-vc12\lib\debug下就为生成的sqlite3shell.exe
加密数据库:
1 2 3 | sqlite3shell.exe example.db sqlite> pragma rekey=123456; sqlite> .exit |
读取数据库:
1 2 3 | sqlite3shell.exe example.db sqlite> pragma key=123456; <-- 这条语句必须在打开数据库后作为第一条语名执行 sqlite> select * from table1; |
自已写的程序中一打开数据库db_,就加一句:
1 | sqlite3_key(db_, "123456", 6); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <opencv2/opencv.hpp> #ifdef _DEBUG #pragma comment(lib, "opencv_highgui249d.lib") #pragma comment(lib, "opencv_core249d.lib") #pragma comment(lib, "opencv_calib3d249d.lib") #pragma comment(lib, "opencv_imgproc249d.lib") #else #pragma comment(lib, "opencv_highgui249.lib") #pragma comment(lib, "opencv_core249.lib") #pragma comment(lib, "opencv_calib3d249.lib") #pragma comment(lib, "opencv_imgproc249.lib") #endif Mat mat(iHeight, iWidth, CV_8UC3, pData); Mat yuvMat; cvtColor(mat, yuvMat, CV_RGB2YUV); imwrite(path, yuvMat); |
1 | bool bRet = QMetaObject::invokeMethod(textLabel, "setText", Q_ARG(QString, "world hello")); |
执行这句会报如下错误:
QMetaObject::invokeMethod: No such method QQuickText::setText(QString)
原因是在QQuickText对应的头文件,比如在C:\Qt\5.6.3\msvc2013\include\QtQuick\5.6.3\QtQuick\private\qquicktext_p.h中,setText方法定义前没有Q_INVOKABLE宏。
正确调用QQuickText::setText的方式是:
1 | textLabel->setProperty("text", "hi, bingo"); |
qmake -tp vc XXX.pro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <functional> class Test124 { public: int Sum(int x, int y) { return x + y; } }; int main() { Test124 testObj; // functional1 can be defined using 'auto' keyword instead std::function<int(int, int)> functional1 = std::bind(&Test124::Sum, testObj, std::placeholders::_1, std::placeholders::_2); int result1 = functional1(1, 2); // functional2 can not be defined using 'auto' keyword instead std::function<int(Test124, int, int)> functional2 = &Test124::Sum; int result2 = functional2(testObj, 1, 2); return 1; } |
ON_SCOPE_GUARD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | class ScopeExit { public: ScopeExit() = default; ScopeExit(const ScopeExit&) = delete; void operator=(const ScopeExit&) = delete; ScopeExit(ScopeExit&&) = default; ScopeExit& operator=(ScopeExit&&) = default; template <typename F, typename... Args> ScopeExit(F&& f, Args&&... args) { func_ = std::bind(std::forward<F>(f), std::forward<Args>(args)...); } ~ScopeExit() { if (func_) { func_(); } }; private: std::function<void()> func_; }; #define _SCOPE_CONCAT(a, b) a##b #define _SCOPE_MAKE_SCOPE_(line) ScopeExit _SCOPE_CONCAT(defer, line) = [&]() #undef ON_SCOPE_GUARD #define ON_SCOPE_GUARD _SCOPE_MAKE_SCOPE_(__LINE__) int main() { FILE* fp = fopen("d:/aa.txt", "w+"); ON_SCOPE_GUARD { fclose(fp); }; fprintf(fp, "hello, file system.\n"); return 1; } |
1 2 3 4 5 6 7 8 9 10 11 | void init() { AllocConsole(); freopen("CONIN$", "r+t", stdin); freopen("CONOUT$", "r+t", stdout); } void fini() { // FreeConsole(); } |
1 2 3 4 5 6 7 | hWnd = CreateWindow(...); SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)12345); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LONG_PTR pData = GetWindowLongPtr(hWnd, GWLP_USERDATA); ... |
有一种情况是系统编译器是arm-linux-gnueabihf-gcc,而软件编译需要arm-linux-gnueabi-gcc,这样/usr/include下需要的是arm-linux-gnueabi头文件目录而非arm-linux-gnueabihf目录,所以需要手动指定,比如在cmake的脚本中:
1 2 3 4 5 | SET(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc") SET(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++") SET(CMAKE_SYSTEM_PROCESSOR "armv7-a_hardfp") add_definitions(-I/usr/include/arm-linux-gnueabihf) add_definitions(-D__ARM_PCS_VFP) |