Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为DLL设置环境变量';微软视窗中的s_C++_Windows_Dll_Environment Variables - Fatal编程技术网

C++ 为DLL设置环境变量';微软视窗中的s

C++ 为DLL设置环境变量';微软视窗中的s,c++,windows,dll,environment-variables,C++,Windows,Dll,Environment Variables,我们有一个链接在DLL中的C/C++应用程序(本例中是CPython,尽管这是一个细节) 我们面临的问题是DLL的环境变量不是从.EXE派生的,而是从启动.EXE的环境派生的 因此,putenvenv变量被忽略 似乎没有明确地为DLL设置env变量的好方法(如果有的话,我会感兴趣),所以另一种方法就是简单地使用一些启动过程 我们可以使用.BAT文件,用户习惯于解压打开.EXE是否有常规方法创建存根.EXE,仅用于设置环境变量?(并将argv传递给主应用程序?) 注意,这是一个已知问题: C

我们有一个链接在DLL中的C/C++应用程序(本例中是CPython,尽管这是一个细节)

我们面临的问题是DLL的环境变量不是从
.EXE
派生的,而是从启动
.EXE
的环境派生的

因此,
putenv
env变量被忽略

似乎没有明确地为DLL设置env变量的好方法(如果有的话,我会感兴趣),所以另一种方法就是简单地使用一些启动过程

我们可以使用
.BAT
文件,用户习惯于解压打开
.EXE
是否有常规方法创建存根
.EXE
,仅用于设置环境变量?(并将
argv
传递给主应用程序?)


注意,这是一个已知问题:

  • CPython问题:

环境变量始终是每个进程的对象,它们不绑定到可执行文件或DLL。我想知道的是你到底什么时候设置这些变量。如果您希望在Python初始化之后反映出所做的任何更改,那么我敢肯定您运气不好。类似地,我也不希望在整个过程中反映Python中所做的更改。get/putenv()很麻烦,本机环境是Unicode。CRT中有一个手帕来缓冲8位版本。再加上CPython拥有与您不同的CRT副本,因此它拥有自己的CRT状态,并解释了在CPython中不可见的putenv()更新的问题。是的,我知道我们无法在DLL中轻松设置环境变量,这就是为什么问题询问使用存根来设置初始环境变量状态。可能不需要使用存根。通常,任何特定的DLL都将使用本机环境(在这种情况下,您可以使用SetEnvironmentVariable)或特定的C运行时(在这种情况下,您可以使用LoadLibrary和GetProcAddress显式调用该运行时的环境函数)。@Harry Johnston-当EXE链接到DLL时,这是否起作用?(初始化时加载)