2

CreateProcessを使用してclを呼び出し、別のC++プログラム(TestProg.cxx)をコンパイルしてDLLにリンクします。CreateProcessから作成されたプロセスの検索パスを設定する方法

TestProg.cpp(1) : fatal error C1034: iostream.h: no include path set 
TestProg.exe#include <iostream.h>が含まれている場合、私は次のコンパイルエラーを得た

if (CreateProcess(PATH_TO_EXE, COMPILATION_OPTIONS, NULL,NULL, 
        FALSE,0,NULL,NULL,&si,&pi)) 
{ 
    //.... 
} 

コンパイルオプション:

/Od /nologo /Fo /RTC /w /Zc TestProg.cxx /DLL 

コール私は、次のコンパイルオプションでcl.exeを呼び出します

0123なしコマンドで、次のリンケージエラーが発生しました:

LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib' 

私は間違っていますか?

ウェブ上の過去6〜7時間の回答を検索しましたが、見つかりませんでした。 Windows APIを使用することは私にとって初めてのことです。

答えて

2

あなたがCreateProcessの定義を見てみると:

BOOL WINAPI CreateProcess(
    __in_opt  LPCTSTR lpApplicationName, 
    __inout_opt LPTSTR lpCommandLine, 
    __in_opt  LPSECURITY_ATTRIBUTES lpProcessAttributes, 
    __in_opt  LPSECURITY_ATTRIBUTES lpThreadAttributes, 
    __in   BOOL bInheritHandles, 
    __in   DWORD dwCreationFlags, 
    __in_opt  LPVOID lpEnvironment, 
    __in_opt  LPCTSTR lpCurrentDirectory, 
    __in   LPSTARTUPINFO lpStartupInfo, 
    __out  LPPROCESS_INFORMATION lpProcessInformation 
); 

あなたはNULLにオプションのパラメータ__in_opt LPVOID lpEnvironment,を設定しています。よると

は定義は言った:

A pointer to the environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process.

cl.exeは、その環境変数からの位置情報と、ライブラリ検索パスを含める取得 - VSディレクトリ内setenv.batを見てみましょう。この場合、これらの変数が設定されている環境では、呼び出しプロセスまたはターゲットプロセスが実行されていません。

あなたは選択肢を持っている - あなたは、MSDNによると、環境変数を自分で作成することができます。

An environment block consists of a null-terminated block of null-terminated strings. Each string is in the following form:

name=value\0 

Because the equal sign is used as a separator, it must not be used in the name of an environment variable.

それとも、VSツールプロンプトから実行するためのプログラムを必要とすることができます。良いチェックは実際には問題が解決するかどうかを確認するために、Visual Studioではなくこのプロンプトからプログラムを実行することです。

#includeを使用しない理由は、含まれていないと、cl.exeが見つからないという事実によるリンカエラーが発生します。その結果、C/C++ランタイムライブラリが検索されます。

補足として、私はC++の標準は#include <iostream>、つまり.hがないと信じています。

+0

ご意見ありがとうございます。私は、副注釈に従って#をに更新しました。コマンドラインから実行すると、次のリンクエラーが表示されます。[リンク:致命的なエラーLNK1561:エントリポイントを定義する必要があります]も#includeなしです。何が問題なのか教えてください。それはenvですか?それらを設定する方法?ありがとう – ZOK

+0

@ZOK、LNK1561 - あなたは主な機能を含むことを忘れました。これはあなたのアプリのエントリーポイントです。 –

関連する問題