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();}即可。