如何设置从CreateProcess创建的流程的搜索路径
How to set search path of a process created from CreateProcess
我正在使用CreateProcess
调用cl
来编译另一个C++程序(TestProg.cxx
)并将其链接到DLL中。我使用以下编译选项调用cl.exe
:
编译选项:
/Od /nologo /Fo /RTC /w /Zc TestProg.cxx /DLL
呼叫:
if ( CreateProcess(PATH_TO_EXE, COMPILATION_OPTIONS, NULL,NULL,
FALSE,0,NULL,NULL,&si,&pi) )
{
//....
}
如果TestProg.exe
包含#include <iostream.h>
,我得到以下编译错误:
TestProg.cpp(1) : fatal error C1034: iostream.h: no include path set
在没有任何#include
命令的情况下,我得到了以下链接错误:
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'
我做错了什么?
我在网上搜索了过去6-7个小时的答案,但没有找到。使用windows API对我来说是新的。
如果您查看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
);
您正在将可选参数__in_opt LPVOID lpEnvironment,
设置为NULL
。
根据上述定义:
指向新进程的环境块的指针。如果此参数为NULL,则新进程将使用调用进程的环境。
cl.exe
从环境变量中获取其包含位置信息和库搜索路径-请查看VS目录中的setenv.bat
。在这种情况下,调用进程和目标进程都没有在设置了这些变量的环境中运行。
您可以选择-您可以根据MSDN创建环境变量:
环境块由一个空终止的块组成以null结尾的字符串。每个字符串的形式如下:
name=value
因为等号用作分隔符,所以不能在中使用环境变量的名称。
或者,您可以要求从VS工具提示符下运行程序。一个很好的检查——事实上,问题是从这个提示运行程序,而不是Visual Studio,看看这是否解决了问题。
不使用#include
会产生链接器错误的原因是,如果没有include,cl.exe
就不会查找它们,而是查找C/C++运行时库。
顺便说一句,我认为C++中的标准是#include <iostream>
,即没有.h
。
相关文章:
- 在特定 Unicode 路径中创建文件
- 如何更改在 c++ 中使用提升库创建的共享内存的路径
- C++ 如何使用字符串中保存的文件路径创建带时间戳的目录
- 如何将用于创建文件的文件的路径提供给C++中的其他文件夹
- 如果路径的每个元素不存在,请为其创建一个目录
- 创建进程使用路径时出现错误事件:类型 "char *" 的 E0167 参数与类型 "LPWSTR" 的参数不兼容
- 库路径绝对是正确的,可以创建所述库的实例,但在调用任何函数时"Undefined reference"
- 如何使用 boost::filesystem 检查路径是否是可创建的文件
- 使用 ros launch 创建一个目录,然后将其路径传递给不同的节点
- Visual C++ 中的创建文件路径错误
- 问题:如何在任何Windows机器上使用路径创建文件
- 是否可以从一系列路径迭代器或子路径创建文件系统 TS basic_path
- 有没有更好的方法来通过 C/C++ 中的环境变量创建路径
- 使用 cookie 的完整路径创建 SoupCookieJarText
- 如何创建文件路径可以像磁盘一样访问的虚拟文件系统
- 与长路径一起使用时,创建目录失败并显示错误 123
- C或C++或WinApi中是否有任何功能来创建目录,包括指定路径中所有不存在的目录
- Qt:如何创建一个文件(其路径需要目录)
- 使用创建跟踪栏设置图像路径
- C++创建进程 - 系统错误#2找不到文件 - 我的文件路径有什么问题?