• 締切済み

COBOL API 初期フォルダを指定する方法

COBOL で Windows APIでフォルダの選択を表示しましたが、 初期フォルダを指定する方法がわかりません。どなたか教えて下さい。 COBOLは富士通 NetCOBOLです。 コールバック関数をどうやって記述したらよいのかわかりません。 MOVE LOW-VALUE TO browseinfo. MOVE ハンドル TO hwndOwner. MOVE 17 TO pidlRoot MOVE LOW-VALUE TO lpszTitle-VALUE. STRING "フォルダを選択してください。" DELIMITED BY INTO Title-VALUE. MOVE FUNCTION ADDR(lpszTitle-VALUE) TO lpszTitle. COMPUTE ulFlags = H"01" + H"02" + H"04" + H"4000" MOVE LOW-VALUE TO lParam-VALUE. STRING "D:\CSVLOAD" DELIMITED BY SIZE INTO lParam-VALUE WITH POINTER X. MOVE FUNCTION ADDR(lParam-VALUE) TO lParam. DISPLAY "ulFlags = " ulFlags. CALL "SHBrowseForFolderA" WITH STDCALL LINKAGE USING BY REFERENCE browseinfo RETURNING pID . DISPLAY "SHBrowseForFolderAのReturnValue = " pID IF pID NOT = 0 CALL "SHGetPathFromIDList" WITH STDCALL LINKAGE USING BY VALUE pID BY REFERENCE pszPath RETURNING ReturnValue DISPLAY "SHGetPathFromIDListA = " ReturnValue DISPLAY " pszPath = " pszPath DISPLAY "pszDisplayName-VALUE = " pszDisplayName-VALUE END-IF.

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

COBOLはよくわかりませんが(学生時代ちょっとやっただけなので)、 Win32 API呼び出しの問題のようですね。 > MOVE 17 TO pidlRoot この、pidlRootに設定する数値を変更することで指定できないでしょうか? 数字の意味は参考URLを見てください。 コールバック関数云々はもうちょっと情報がないとわかりません。

参考URL:
http://yokohama.cool.ne.jp/chokuto/urawaza/prm/CSIDL.html
fudoukai
質問者

お礼

ご返事が遅くなってすいません。 >> MOVE 17 TO pidlRoot SHBrowseForFolderA取得した、値をいれてもOKなのか一度試してみます。 ダメモトで・・

関連するQ&A

  • COBOL OCCURSで指定したデータの参照の仕方

    IBM COBOL でプログラムを作成しています。 初歩的な質問で恥ずかしいのですが、どなたか教えていただけますか。 まず、以下のようなTABLEを定義しました。 01 A-TABLE. 03 B OCCURS 100. 05 C PIC X(08) VALUE SPACE. 05 D PIC X(02) VALUE SPACE. 05 E PIC X(08) VALUE SPACE. 05 F PIC X(05) VALUE SPACE. 05 G PIC X(05) VALUE SPACE. 05 H PIC X(05) VALUE SPACE. その後に、INPUTファイルからREADしたデータのうち、必要な部分だけを 該当のTABLEに添え字を使用して代入していく処理を作成したいと思っています。 その場合に、上記の「C」~「H」に代入するにはどうすればよいでしょうか? また後続の処理で直接その値を参照したいのですが、どうすれば良いでしょうか? 私の考えられる範囲で以下のようにプログラムしましたが、 実行時に「OUTSIDE THE REGION OF THE TABLE.」というようなエラーが出力されてしまいました。 MOVE I TO C(IDX1) MOVE J TO D(IDX1) MOVE K TO E(IDX1) MOVE L TO F(IDX1) MOVE M TO G(IDX1) MOVE N TO H(IDX1) どなたかよろしくお願いします。

  • COBOLのCALL文がいまいちつかめません。

    いつもお世話になっています。 WINDOWSでCOBOL85を使いながら、COBOLの勉強をしています。 JAVAを基本情報試験のために勉強したくらいの初心者です。 シーケンシャルファイルでマッチング処理を行う、 小さなプログラムを課題としている途中、 CALL文を使ってサブプログラムを作ってみてくださいと言われました。 そこで質問なのですが、 メインプログラムの集団項目をUSING指定で引数として、 サブプログラムで受け取り、処理をするまではいいのですが、 戻り値をどのようにして受け取ればいいのかが イメージがつかめません。 ・戻り値を受け取るための命令 ・戻り値は1つだと思うのですが、どの変数?に返ってくるのか (集団項目ごと返ってくる?) など、何かあればご助言をいただけないでしょうか? ソースは次の通りです。 よろしくお願いいたします。 ■メイン IDENTIFICATION DIVISION. PROGRAM-ID. MACHING_TEST. (省略) WORKING-STORAGE SECTION.   01 JUDGE_F.    03 KEY_F     PIC 9(01).    03 CHANGE_F     PIC X(06).    03 EXCEP_M     PIC 9(01). (省略) CALL "JUDGE_FEMALE" USING JUDGE_F ON EXCEPTION   DISPLAY N"エラーです。プログラムを終了します"   STOP RUN   NOT ON EXCEPTION    IF EXCEP_M = 9 THEN MOVE "ERRER!" TO FEMALE_OUT ELSE  IF EXCEP_M = 1 THEN MOVE CHANGE_F TO  FEMALE_OUT  END-IF    END-IF    END-CALL. (以下略) ■サブ IDENTIFICATION DIVISION. PROGRAM-ID. JUDGE_FEMALE. DATA DIVISION. LINKAGE SECTION. 01 JUDGE_F.  03 KEY_F PIC 9(01).  03 CHANGE_F PIC X(06).  03 EXCEP_M PIC 9(01). PROCEDURE DIVISION USING JUDGE_F. IF KEY_F = 1  THEN   MOVE "オトコ" TO CHANGE_F   MOVE 1 TO EXCEP_M  ELSE   IF KEY_F = 2 THEN  MOVE "オンナ" TO CHANGE_F  MOVE 1 TO EXCEP_M ELSE  MOVE 9 TO EXCEP_M END-IF END-IF. PROGRAM-END.  STOP RUN.

  • COBOL 1:1のマッチングについて

    こんばんは。プログラム作成が行き詰ってしまったので、 アドバイス頂けると幸いです。 要件:マスタから名前を検索する 出力番号、名前、合計点の3つ 【マスタファイル】 生徒番号  名前 (数字3桁) (全角6文字)   ・       ・   ・       ・   ・       ・ 【トランザクションファイル】 生徒番号   合計点 (数字3桁)  (数字3桁)   ・       ・    ・       ・ 【出力ファイル】 生徒番号 氏名 合計点 001 ○○  □□ DATA DIVISION. FILE SECTION. FD INFILEM. 01 INRECM. 05 IM-ID PIC X(03). 05 IM-NAME PIC X(12). FD INFILET. 01 INRECT. 05 IT-ID PIC X(03). 05 IT-GOUKEI PIC 9(03). FD OUTFILE. 01 OUTREC. 05 O-ID PIC X(03). 05 O-NAME PIC X(12). 05 O-GOUKEI PIC ZZ9. WORKING-STORAGE SECTION. 01 WM-ID PIC X(03). 01 WT-ID PIC X(03). 01 W-GOUKEI PIC 9(03). PROCEDURE DIVISION. PERFORM MAE-SHORI THRU MAE-SHORI-EXIT PERFORM SHU-SHORI THRU SHU-SHORI-EXIT UNTIL WM-ID = HIGH-VALUE AND WT-ID = HIGH-VALUE PERFORM ATO-SHORI THRU ATO-SHORI-EXIT STOP RUN. MAE-SHORI. OPEN INPUT INFILEM INFILET OUTPUT OUTFILE MOVE SPACE TO WM-ID MOVE SPACE TO WT-ID READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. MAE-SHORI-EXIT. EXIT. SHU-SHORI. IF WM-ID = WT-ID THEN PERFORM KOUSHIN THRU KOUSHIN-EXIT ELSE IF WM-ID < WT-ID THEN PERFORM SHUTURYOKU THRU SHUTURYOKU-EXIT ELSE PERFORM ERRORS THRU ERRORS-EXIT END-IF END-IF. SHU-SHORI-EXIT. EXIT. KOUSHIN. MOVE IT-GOUKEI TO W-GOUKEI MOVE IM-ID TO O-ID MOVE IM-NAME TO O-NAME MOVE W-GOUKEI TO O-GOUKEI WRITE OUTREC READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. KOUSHIN-EXIT. EXIT. SHUTURYOKU. MOVE IM-ID TO O-ID MOVE IM-NAME TO O-NAME MOVE W-GOUKEI TO O-GOUKEI WRITE OUTREC READ INFILEM AT END MOVE HIGH-VALUE TO WM-ID END-READ IF WM-ID NOT = HIGH-VALUE THEN MOVE IM-ID TO WM-ID END-IF. SHUTURYOKU-EXIT. EXIT. ERRORS. DISPLAY "** ERROR ** IM-ID=" IM-ID " IT-ID=" IT-ID READ INFILET AT END MOVE HIGH-VALUE TO WT-ID END-READ IF WT-ID NOT = HIGH-VALUE THEN MOVE IT-ID TO WT-ID END-IF. ERRORS-EXIT. EXIT. ATO-SHORI. CLOSE INFILEM INFILET OUTFILE. ATO-SHORI-EXIT. EXIT. 上記のソースで実行すると 番号 名前 2桁の謎の数字が1レコードとしてでてきてしまいます。 詳しい方、ご教示くださいませ。

  • COBOLで「WORKING-STORAGE SECTION.」と「L

    COBOLで「WORKING-STORAGE SECTION.」と「LINKAGE SECTION.」を 使用して、呼び出そうとしていますが以下のエラーが発生してしまいます。 「line12,column 6:""SAMPLE-02""文法が間違っています。」 です。 どのように文法が間違っているのでしょうか? 以上、よろしくお願いします。 「SAMPLE_01.COB」 ---------------------------------------------- *文字列の表示 IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-01. * ENVIRONMENT DIVISION. * DATA DIVISION. WORKING-STORAGE SECTION. 01 HELLO PIC X(12) VALUE "Hello World!". * PROCEDURE DIVISION. CALL "SAMPLE-02" USING HELLO. STOP RUN. 「SAMPLE_02.COB」 ---------------------------------------------- *項目に値を入れる IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE-02. * ENVIRONMENT DIVISION. * DATA DIVISION. LINKAGE SECTION. 01 HELLO PIC X(12). * PROCEDURE DIVISION USING HELLO. DISPLAY HELLO. STOP RUN.

  • おしえてください。

    cobol言語のスクールにかよっていますがわからないのでおしえてください。 素数判定プログラムなのですが(ある数が割り切れたとき、素数ではない 割り切れなければ素数) 途中から PERFOM KEISAN UNTIL OWARI = "N". DISPLAY SPACE. STOP RUN. KEISAN. MOVE SPACE TO H-ATAI. ACCEPT H-ATAI AT 0436. MOVE H-ATAI TO ATAI. PERFORM KEISAN2 VARYING N FROM 2 BY 1 UNTIL N > ATAI - 1. <==ここに1回でも割り切れたとき DISPLAY KOTAE AT 0535.    判定する言語をおしえて ACCEPT OWARI AT 1045.     この文だと全部「素数」と、 KEISAN2.            出てしまうのですが。 DIVIDE ATAI BY N GIVING HENSU REMAINDER AMARI. IF AMARI = 0 MOVE "素数ではありません" TO KOTAE ELSE MOVE "素数です"TO KOTAT. お願いします。

  • COBOL初心者です。

    COBOL初心者です。 プログラミング自体初めて1か月です。 いかんせん本当に初心者なので どう質問したらイイのか分からないんですがヨロシクです。 実行したらなんか固まってしまう?んです。 記述がおかしいんでしょうけど、何がおかしいのか分からなくて… どう書けばイイのか分からないのでソースをそのまま貼り付けます。 IDENTIFICATION DIVISION. PROGRAM-ID. 000. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-FILE ASSIGN TO "x.txt". DATA DIVISION. FILE SECTION. FD IN-FILE. 01 IN-REC. 03 X PIC X(10). WORKING STORAGE SECTION. 01 WORK. 03 WK-X PIC X(10). 01 END-FLAG PIC 9 VALUE 0. PROCEDURE DIVISION. MAIN-SEC SECTION. MAIN-010. OPEN INPUT IN-FILE. PERFORM UNTIL END-FLAG = 1 READ IN-FILE AT END MOVE 1 TO END-FLAG NOT AT END MOVE X TO WK-X DISPLAY WK-X END-PERFORM. CLOSE IN-FILE. STOP RUN. MAIN-SEC-END. EXIT. なんしか、"x.txt"を読み込みたいんです。 勉強中なのでとりあえず読み込みたいデータはちっちゃくしました。 うーんどう伝えたらイイんでしょう~ よろしくお願いします。

  • COBOL・全角判定

    以前こちらで質問したものです。 http://oshiete1.goo.ne.jp/qa2553484.html 例題を参考に詳細設計書を作成中ですが、 お客様の要望で「漢字項目は前後に漢字制御コード(前に‘0A42’後に‘0A41’)を付加する」というのがあり、わからなくなってしまい質問です。 漢字項目もX(40)というようにCOPY句で設定されています。 どの項目が漢字項目なのかは資料をいただいてわかっています。 例題をもとにすると IF DATA-AREA NOT = ' '   PERFORM TEST BEFORE VARYING I FROM DATA-LEN BY -1       UNTIL (I < 1) OR (DATA-AREA(I:1) NOT = ' ')       CONTINUE    END-PERFORM 【1】    MOVE I TO DATA-LEN    STRING DATA-AREA ','      DELIMITED SIZE      INTO OUT-REC      WITH POINTER DATA-POS    END-STRING 【1】にIF文でデータが全角かどうか判定するのだと思うのですが どう判定したらよいのでしょうか。マニュアルをみたのですが探せませんでした。またもし全角データだった場合STRINGはどのように記入すればよいのでしょうか。

  • cobolのコントロールブレイク

    趣味の一環としてcobolのファイル入出力プログラムを勉強しているのですが、 リング構造を利用したコントロールブレイク機能の実装で躓いてしまいました。 知恵をお貸しいただければ幸いです。 ソースコードここから IDENTIFICATION DIVISION. PROGRAM-ID. BREAKDV1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INF ASSIGN TO "C:\cobol\sample.cbl" STATUS FST. SELECT OUF ASSIGN TO "C:\cobol\data.txt". DATA DIVISION. FILE SECTION. FD INF. 01 F1R PIC X(72). WORKING-STORAGE SECTION. 01 INKEY PIC 9(01). 01 SAVKEY PIC 9(01). 01 FST PIC X(02). PROCEDURE DIVISION. ACCEPT INF OPEN INPUT INF OUTPUT OUF PERFORM 読込処理 THRU 読込出口 PERFORM UNTIL INKEY = HIGH-VALUE MOVE SAVKEY TO INKEY PERFORM UNTIL INKEY NOT = SAVKEY PERFORM 同一処理 THRU 同一出口 PERFORM 読込処理 THRU 読込出口 END-PERFORM PERFORM 合計処理 THRU 合計出口 END-PERFORM PERFORM 総計処理 THRU 総計出口 CLOSE INF OUF STOP RUN. 同一処理. DISPLAY "SAME" WRITE F1R DISPLAY F1R 同一出口. EXIT. 合計処理. DISPLAY "TOTAL" 合計出口. EXIT. 総計処理. DISPLAY "END" 総計出口. EXIT. 読込処理. PERFORM UNTIL FST NOT "00" READ INF END MOVE HIGH-VALUE TO INKEY NOT END CONTINUE END-READ END-PERFORM 読込出口. EXIT. ソースコードここまで(処理内容は仮のものです) 参考文献ではこのような組み方でよいはずなのですが、コンパイルした際に BREAKDV1.cbl:19: Error: syntax error, unexpected "end of file" とエラーが発生してしまいました。 このエラーを解消する方法をお教え下さい。 開発環境: Windows7SP1+MinGW32、サクラエディタ

  • toの意味

    英単語のニュアンスをつかむのには向こうの小学生レベルの辞書を 使うのがいいというで購入したのですが 辞書の中で buy To buy means to give money for something. call To call means to say in a loud voice. afraid To be afraid means to think something bad will happen to you. come To come is to move toward. といちいちtoが出てくるのですがこのtoはどういう意味なのでしょうか?

  • COBOLのプログラムがビルドできません;;

    今年の4月からシステム関係の会社に就職する者です。 就職にあたって会社からの課題としてCOBOLのプログラムを転記して実行するというものが出たのですが、どうしてもビルドエラーになってしまい困っています。 IDENTIFICATION DIVISION. PROGRAM-ID.  KADAI005 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. / DATA DIVISION. FILE SECTION. / WORKING-STORAGE SECTION. 01 W-九九TBL. 03 W-行 OCCURS 9. 05 W-列 OCCURS 9. 07 W-積 PIC 9(02). 01 W-指標1 PIC 9(02). 01 W-指標2 PIC 9(02). 01 W-合計 PIC 9(04). / PROCEDURE DIVISION. メインコントロール        SECTION. メインコントロールS. メインコントロール   PERFORM 初期処理. PERFORM 主処理. PERFORM 終了処理. メインコントロールE. EXIT. 初期処理             SECTION. 初期処理S. ワークエリアの初期化 MOVE ZERO TO W-九九TBL W-合計. 初期処理E. EXIT. 主処理              SECTION. 主処理S. PERFORM VARYING W-行 FROM 1 BY 1 UNTIL W-行 > 9 PERFORM VARYING W-列 FROM 1 BY 1 UNTIL W-列 > 9 COMPUTE W-積(W-行,W-列) = W-行 * W-列      COMPUTE W-合計 = W-合計 + W-行 * W-列    END-PERFORM END-PERFORM. DISPLAY "合計 =" W-合計. DISPLAY "5×4=" W-積(5,4). DISPLAY "2×7=" W-積(2,7). 主処理E. EXIT. 終了処理             SECTION. 終了処理S. プログラム終了 STOP RUN. 終了処理E. EXIT. 提出期限が明日に迫っていて焦っています; 回答よろしくお願いします。

専門家に質問してみよう