小编Sim*_*sch的帖子

确定是否已从命令行(cmd)启动/执行批处理脚本 - 或 - 要暂停还是不暂停?

我喜欢在我的cmd.exe脚本中有一个典型的"usage:"行- 如果缺少一个参数,用户可以简单地提醒我们如何使用脚本.

问题是我无法安全地预测潜在用户是否会使用GUI或CLI.如果有人使用GUI在资源管理器窗口中双击此脚本,他们就没有机会阅读任何内容,除非我pause在窗口中.如果他们使用CLI,pause会打扰他们.

所以我正在寻找一种方法来检测它.

@echo off
if _%1_==__ (
    echo usage: %nx0: filename
    rem now pause or not to pause?
)
Run Code Online (Sandbox Code Playgroud)

有一个很好的解决方案吗?

windows cmd batch-file

23
推荐指数
2
解决办法
6493
查看次数

vscode:任务扩展另一个任务/传递参数

起始位置

定义一个工作构建任务的tasks.json(当前唯一一个,定义为默认且工作正常,也由[CTRL]+[SHIFT]+[B]触发)。

它触发外部命令(批处理/shell 脚本)并传递一些参数。摘抄:

        {
            "label": "sample task",
            "windows": {
                "command": "${workspaceFolder}\\procedures_win\\doStuff.bat"
            },
            "linux": {
                "command": "${workspaceFolder}/procedures/doStuff.sh"
            },
            "type": "shell",
            "args": [
                "fixedParm",
                "${fileBasename}"
            ]
        }
Run Code Online (Sandbox Code Playgroud)

(完整的较长,主要是因为 ProblemMatcher 中的条目数量较多,包含目标特定环境设置,100 行+ ...)

目标

创建第二个任务“示例任务(仅检查)”,该任务完全相同,但向脚本传递一个额外参数"check-only"

选项?

是否可以“扩展”给定的任务,仅“覆盖” args

如果不是:是否可以让一个任务实际运行(不依赖于)另一个任务并设置一个环境参数,然后原始任务可以将其用作"${env:someValue}"(将导致空字符串或请求的“仅检查” ”)?

作为最后的手段,可以定义 5 个而不是两个任务(1 与当前任务几乎相同,但从外部命令/文件获取输入;2+3 元任务取决于 4+5、4+5 命令,创建一个${workspaceFolder}/.taskmode不包含任何内容或“仅检查”的文件)。

问题

不安装扩展的工作解决方案是什么样子的?

vscode-tasks

7
推荐指数
0
解决办法
629
查看次数

OpenProcess:是否可以为 PROCESS_QUERY_LIMITED_INFORMATION 获得 ERROR_ACCESS_DENIED 而不是 SYNCHRONIZE?

我正在使用OpenProcess从 PID 获取进程句柄。函数应该做的两个任务是:

  • 必须:等待进程终止,完成 WaitForSingleObject (process, INFINITE)
  • 如果可能:获取退出代码,完成 GetExitCodeProcess (process, &ret)

:是否有可能得到ERROR_ACCESS_DENIEDPROCESS_QUERY_LIMITED_INFORMATION,但不是SYNCHRONIZE?如果是:哪种情况?

我的完整代码供参考:

/* wait for a pid to end and return its exit code
   error codes are returned as negative value
*/
int
waitpid (const int pid)
{
    int status = 0;
    HANDLE process = NULL;
    DWORD ret;

    /* windows will wait for the own process to end... abort */
    if (pid == _getpid ()) {
        status = 0 - …
Run Code Online (Sandbox Code Playgroud)

c winapi process

4
推荐指数
1
解决办法
2453
查看次数

在 ubuntu 上使用 gnu cobol 编译 Windows (.exe) 可执行文件

我需要将我在 .cobc 文件中编写的程序编译为 Windows 可执行文件。该文件名为 main.cobc
使用以下命令进行编译: cobc -x -free *.cobc -o main
使其成为 Linux 可执行文件,这是可以的,但不能直接在 Windows 上运行。
我在我的 linux ubuntu 虚拟机上安装了 gnucobol (OpenCOBOL)。
请帮忙。有没有办法以与 Windows 兼容的方式编译它?

提前致谢!

linux cross-compiling gnucobol

4
推荐指数
1
解决办法
1141
查看次数

如何在 vscode 中同时显示内部终端和调试控制台?

我需要在服务器上调试程序,并且希望在 GDB 中保留其输出。一般而言,以下“作品”:

  • 手动启动(终端)任务,打开 ssh 连接,执行必要的预设置(服务器端脚本),然后运行gdbserver --multi :12345
  • 在附加模式下运行并执行适当的命令链的 GDB 调试配置"set sysroot remote:", "target extended-remote myserver:12345", "set remote exec-file /path/to/myfile", "run"

我知道看到程序在断点上运行和停止,在集成终端中查看程序的输出,并且可以切换到调试控制台。但是如何才能同时看到调试控制台和集成终端呢?
如果可能的话,我不想对其中一个窗口使用外部窗口,因为打开了多个 vscode 实例 - 每个实例都连接到不同的服务器 - 并且多个窗口“神奇地”属于彼此将使调试变得更加困难 -集成选项彻底解决了这个问题。

visual-studio-code vscode-debugger

4
推荐指数
1
解决办法
3538
查看次数

在COBOL中启动子进程

如何在GnuCOBOL中启动子进程?

在Node.js的,我们可以使用spawnexec启动子进程:

var proc = require("child_process").spawn("ls", ["-l"]);
proc.stdout.on("data", function (chunk) {
  console.log(chunk);
});

// or

var proc = require("child_process").exec("ls -l"], function (err, stdout, stderr) {
   ...
});
Run Code Online (Sandbox Code Playgroud)

上面的两个例子都运行ls -l(列出文件和目录).如何在COBOL中实现同样的目标?

cobol child-process gnucobol

3
推荐指数
1
解决办法
199
查看次数

使用cl.exe将asm文件编译为dll

给出:带有入口点的prog.c prog

我通常会

cl.exe /MD /LD /Fe"prog.dll" /Fo"prog" "prog.c" /link ext.lib
Run Code Online (Sandbox Code Playgroud)

要么

cl.exe /MD /Fo"prog.obj"
cl.exe /MD /LD /Fe"prog.dll" "prog.obj" /link ext.lib
Run Code Online (Sandbox Code Playgroud)

在两种情况下,生成的prog.dll都可以正常工作。

现在,我执行以下操作来获取一个asm文件而不是obj文件:

cl.exe /c /MD /Fa"prog"
Run Code Online (Sandbox Code Playgroud)

到目前为止,这个“工作”也是如此。但我不知道如何制作此文件的dll。

尝试过:

ml.exe /c /Cx /coff prog.asm
cl.exe /MD /LD /Fe"prog.dll" "prog.obj" /link ext.lib
Run Code Online (Sandbox Code Playgroud)

结果:没有入口点的prog.dll prog

再次尝试:

ml.exe /c /Cx /coff prog.asm
cl.exe /MD /LD /Fe"prog.dll" "prog.obj" /link /entry:prog ext.lib
Run Code Online (Sandbox Code Playgroud)

结果:编译器警告错误的入口点_prog不能用12个字节的参数进行stdcall以及有关未解析符号_memcpy的编译器错误。

问题:有什么方法可以将由/ Fa生成的cl.exe生成的asm文件编译为dll(最好是通过cl.exe,如果不能使用ml.exe编译)?

assembly masm visual-c++

3
推荐指数
1
解决办法
1900
查看次数

打开文件以便在COBOL中读取

我在Windows 10上使用OpenCobolIDE 4.7.4(它基于GnuCOBOL)并尝试编译该程序打开一个文件进行阅读:

   IDENTIFICATION DIVISION.
   PROGRAM-ID. HELLO.

   ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
         FILE-CONTROL.
         SELECT STUDENT ASSIGN TO 'input.txt'
         ORGANIZATION IS LINE SEQUENTIAL.            

   DATA DIVISION.
      FILE SECTION.
      FD STUDENT.
      01 STUDENT-FILE.
         05 STUDENT-ID PIC 9(5).
         05 NAME PIC A(25).

      WORKING-STORAGE SECTION.
      01 WS-STUDENT.
         05 WS-STUDENT-ID PIC 9(5).
         05 WS-NAME PIC A(25).
      01 WS-EOF PIC A(1). 

   PROCEDURE DIVISION.
      OPEN INPUT STUDENT.
         PERFORM UNTIL WS-EOF='Y'
         READ STUDENT INTO WS-STUDENT
            AT END MOVE 'Y' TO WS-EOF
            NOT AT END DISPLAY WS-STUDENT
         END-READ
         END-PERFORM.
      CLOSE …
Run Code Online (Sandbox Code Playgroud)

cobol gnucobol

2
推荐指数
1
解决办法
2506
查看次数

如何引用模糊的顶级变量?

在这段代码中,我想ACCEPTDISPLAY01级D变量.虽然05级D很容易,D OF F有没有办法指定01级D

显而易见的解决方案是"只需更改变量名称",但希望有更好的方法!

IDENTIFICATION DIVISION.
    PROGRAM-ID. DISAMBIGUATION-ISSUE.
DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 D VALUE PIC 9(8). 
    01 F.
        05 Y PIC 9(4).
        05 M PIC 9(2).
        05 D PIC 9(2).
PROCEDURE DIVISION.
*> Errors here, D is ambiguous
    ACCEPT D.
    DISPLAY "Date: " D.
STOP RUN.
Run Code Online (Sandbox Code Playgroud)

cobol disambiguation

2
推荐指数
1
解决办法
152
查看次数

让程序中的控制流超越 Cobol 中的最后一行

使用此 COBOL 代码:

  IDENTIFICATION DIVISION.                              
    PROGRAM-ID. DBNULLA.                                  
    DATA DIVISION.                                        
      WORKING-STORAGE SECTION.                            
        EXEC SQL                                          
          INCLUDE SQLCA                                   
        END-EXEC.                                         
        EXEC SQL                                          
          INCLUDE PATIENT                                 
        END-EXEC.                                         
    PROCEDURE DIVISION.                                   
    MAIN-PARA.                                            
         DISPLAY 'SAMPLE STRUCTURE OF COBOL DB2 PRORGRAM'.
         DISPLAY 'WE ARE CHECKING NULL HERE             '.
         MOVE 100 TO PAT-ID.                              
          EXEC SQL       
           SELECT PAT_ID,PAT_NAME,WARD_NAME INTO :PAT-ID,:PAT-NAME,
           :WARD-NAME FROM PATIENT WHERE PAT_ID = :PAT-ID          
          END-EXEC.                                                
         IF SQLCODE = 0                                            
          DISPLAY 'HI'                                             
         ELSE                                                      
          DISPLAY 'EMBEDDED SQL SQLCODE:' SQLCODE                  
         END-IF.                                                   
    STOP-RUN.    
   
Run Code Online (Sandbox Code Playgroud)

执行时我得到以下输出:

SAMPLE STRUCTURE OF COBOL DB2 PRORGRAM                                          
WE ARE CHECKING …
Run Code Online (Sandbox Code Playgroud)

db2 cobol mainframe

0
推荐指数
1
解决办法
339
查看次数