8

WindowsのCreateProcess関数を使って並列処理をしたいのは初めてです。MSDN の例に基づいて、次のようなLPTSTR「(非定数) TCHAR 文字列」 コマンド ライン引数を作成しました。

LPTSTR szCmdline[] = _tcsdup(TEXT("\C:\\MyProgram_linux_1.1\\MyProgram.exe") );

LPTSTR およびその他のchar 型と string 型については、ここで説明します。

CreateProcessコマンドライン引数はこのように渡されます

if (!CreateProcess(NULL, szCmdline, /*...*/) ) cout << "ERROR: cannot start CreateProcess" << endl;

そして、これらのヘッダーが存在します

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <strsafe.h>
#include <direct.h>

コンパイル時にこれはエラーです:

error C3861: '_tcsdup': identifier not found

このエラーを検索すると同じエラーが見つかりましたが、解決策は.NETフレームワークを使用することに固有のものであり、error C3861: '_tcsdup'

それが関連しているかどうかはわかりませんが、error C2059: syntax error : ')'上にもありますif (!CreateProcess(NULL, szCmdline, /*...*/) ) cout << "ERROR: cannot start CreateProcess" << endl;

このエラーはどのように修正されますか? そして、これで何が起こっているのですか?

また、CreateProcessLinux 機能を学習するための学習ステップとしてfork()を使用しています。Visual Studio インターフェースの方が使いやすく、これがデバッグされて機能したら、g++ インターフェースに変更しfork()、そこから変更してデバッグします。fork()可能であれば、につながるソリューションが最も有益です。

4

2 に答える 2

8

次のインクルードを追加します。

#include <tchar.h>
于 2013-03-13T18:12:03.737 に答える
3

_tcsdupUnicode 設定に応じて実装関数にマップされるマクロです。ヘッダー ファイル (tchar.h) をインクルードしていないため、コンパイラはそれをシンボルと見なし、間違ったコードを発行します。

実際の位置設定に応じて、_tcsdump は次のいずれかにマップされます。

  • _strdup
  • _mbsdup
  • _wcsdup

http://msdn.microsoft.com/en-us/library/y471khhc(v=vs.110).aspx

于 2013-03-13T18:45:35.117 に答える