ncl編譯
1. C語言中如何連續執行多條CMD命令
參考下列C 或C++ 代碼:
bool ConsoleCompiler(char * ch)
{
// 建立批處理文件
std::ofstream fout( "CBStudy.cmd" );
if ('v'==ch[0]) {
fout << "@echo off set PATH=" << CBS_vcbin << ";%PATH% set INCLUDE=" <<CBS_include
<<" set LIB=" << CBS_lib <<" color a @echo 歡迎使用命令行VC2010編譯器中文版 你可以使用TAB自動補全 cl cd \mycpp " ;
}
if ('g'==ch[0]) {
fout << "@echo off set PATH=" << CBS_gccbin << ";%PATH% color a @echo 歡迎使用命令行 GCC 編譯器中文版 你可以使用TAB自動補全 g++ -v cd \mycpp " ;
}
fout.close();// 執行批處理文件
char szCommandLine[] = "cmd /k CBStudy.cmd";
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;si.dwFlags = STARTF_USESHOWWINDOW;// 指定wShowWindow成員有效
si.wShowWindow = TRUE;// 此成員設為TRUE的話則顯示新建進程的主窗口,
// 為FALSE的話則不顯示
BOOL bRet = ::CreateProcess (
NULL,// 不在此指定可執行文件的文件名
szCommandLine,// 命令行參數
NULL,// 默認進程安全性
NULL,// 默認線程安全性
FALSE,// 指定當前進程內的句柄不可以被子進程繼承
CREATE_NEW_CONSOLE,// 為新進程創建一個新的控制台窗口
NULL,// 使用本進程的環境變數
NULL,// 使用本進程的驅動器和目錄
&si,
&pi);
return true;
}
2. java 調用ncl程序,最後怎麼關閉
最簡單的是把C代碼編譯成C.exe,然後在java中調用naitive方法, Process process = Runtime.getRuntime().exec("C.exe"); 高級點可以做成dll由java調用
3. 請教,用C++寫的Win32應用程序,如何固定窗口位置和大小,就是不可拖動,也不能改變大小
不可拖動, 可以去掉標題欄,即去掉WS_CAPTION風格
不能改變大小,可以去掉WS_THICKFRAME,即WS_SIZEBOX風格
如果以上方法不能滿足你的要求,你還可以處理WM_NCHITTEST消息:
case WM_NCHITTEST:
{
LRESULT res = DefWindowProc(hwnd, uMsg, wParam, lParam);
if (res == HTCAPTION || (res >= HTLEFT && res < HTBORDER))
return HTCLIENT;
}
還可以處理WM_NCLBUTTONDOWN消息:
case WM_NCLBUTTONDOWN:
if (wParam == HTCAPTION || (wParam >= HTLEFT && wParam < HTBORDER))
return 0;
要不能改變大小,最好還是去掉WS_THICKFRAME風格,然後這樣處理WM_NCLBUTTONDOWN就行了:
case WM_NCLBUTTONDOWN:
if (wParam == HTCAPTION)
return 0;
4. 關於C,哪兒出錯了,錯誤提示error C2065: 'matrixreserv' : undeclared identifier
在main函數前加一句:
float **matrixreserv(int nrl, int nrh, int ncl, int nch);
順便說下,調用的這句
e=matrixreserv(a,b,c,d);
函數定義返回類型是float **,而e是float的,匹配不上啊
char *a; //字元串 改為 char a[20];//存放字元串的字元數組
int jie; //方程的解 改為 double jie;
dy = 0; 刪去 dy=0;
兩處的 for(i=1;i<=z;i++) 都改為 for(i = 0; i < z; i++)
if (a[i] == '==' ) 改為 if (a[i] == '=' )
{z=i; 改為 {dy = i;
a=0;b=0; 刪去 a=0;b=0;
fun(a,1,dy,&b,&c); 改為 fun(a, 0, dy - 1, &b, &c);
fun(a,dy,z,&b,&c); 改為 fun(a, dy + 1, z - 1, &b, &c);
jie=(d-b)/(e-c); 改為 jie=((double)(d-b))/(e-c);
printf("%c = %d",zm,jie); 改為 printf("%c = %f",zm,jie);
6. 如何把swf變成無邊框可隨意移動的EXE文件
藉助第三方工具對swf封裝!
7. 求助:ncl在linux下的安裝問題
CentOS6.4 安裝NCL遇到的問題,有需要的朋友可以參考下。
問題1:缺少openssl-0.9.8 結果程序報錯:
"ncl: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory"
這是因為缺少共享庫文件。
解決方法:
在/usr/lib下找到了 libcrypto.so.0.9.8k,做個鏈接。
$ su
$ cd /usr/lib
$ ln -sf libcrypto.so.0.9.8k libcrypto.so.0.9.8
如果無法獲得超級用戶許可權,可以在home下建立個目錄,如:
/home/usr/lib
$ cd /home/usr/lib
$ ln -sf /usr/lib/libcrypto.so.0.9.8k ./libcrypto.so.0.9.8
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/usr/lib #或者是在.bashrc中添加這一行
如果沒找到合適版本的libcrypto,可以從這里下載:http://www.openssl.org
然後
$ ./config shared
$ make
將生成的 libcrypto.so.0.9.8 按照上面的方法操作。
再次運行NCL,報錯內容變為 libssl.so.0.9.8,如法炮製。
最後運行NCL,報錯內容為:
ncl: /home/usr/lib/libcrypto.so.0.9.8: no version information available (required by ncl)
ncl: /home/usr/lib/libssl.so.0.9.8: no version information available (required by ncl)
這個錯誤暫時沒有方法解決,不過NCL可以運行,應該沒啥問題。
問題2:缺少libbz2.so.1.0 程序報錯:「ncl: error while loading shared libraries: libbz2.so.1.0:
cannot open shared object file: No such file or directory」
解決方法:
從http://sources.redhat.com/bzip2/下載安裝包
參考http://man.chinaunix.net/linux/lfs/htmlbook/chapter06/bzip2.html進行安裝
Bzip2 是塊排序文件壓縮器,比傳統的gzip生成更高壓縮比的文件。
安裝下列程序: bunzip2 (link to bzip2), bzcat (link to bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless 和 bzmore
安裝下列庫文件: libbz2.a, libbz2.so (link to libbz2.so.1.0), libbz2.so.1.0 (link to libbz2.so.1.0.2) 和 libbz2.so.1.0.2
Bzip2 依賴於: Bash, Binutils, Coreutils, Diffutils, GCC, Glibc, Make.
安裝 Bzip2
為編譯 Bzip2 做准備 with:
make -f Makefile-libbz2_so
make clean
-f標志使bzip2g根據另一個Makefile來編譯,這里就是Makefile-libbz2_so文件,它創建一個動態的libbz2.so庫文件,然後把bzip2工具連接到這個庫上。
編譯軟體包:
make
安裝:
make install
把共享的bzip2二進制文件拷貝到/bin目錄,創建必要的符號鏈接,作一些清理工作.
cp bzip2-shared /bin/bzip2
cp -a libbz2.so* /lib
ln -s ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm /usr/bin/{bunzip2,bzcat,bzip2}
mv /usr/bin/{bzip2recover,bzless,bzmore} /bin
ln -s bzip2 /bin/bunzip2
ln -s bzip2 /bin/bzcat
8. DEV C++中報錯: 'strnclen_s' was not declared in this scope,怎麼解
說的是strnclen_s吧?strnclen_s是筆誤?
strnlen_s 是VC++對C/C++標准函數庫的安全擴展。 DEV-C++只是一個編譯環境,配置的是GCC或MinGW,雖然新版的編譯器支持C11標准,但並沒有完全包含VC++的庫函數。你啟動-std=c11參數編譯,此外還要連接VC的相應庫函數。但那也不一定保證成功。
現成的有一個,slibc,開源的,搜查一下,拿來用就是了。最好就是自己寫一個,也不算難,參看微軟的介面,注意內部安全檢測,不要過界就可以了。 如果嫌麻煩,乾脆寫一個函數,內部直接調
用相應的標准庫函數。比如strnlen_s {strnlen();}即可。