虚拟环境下,dll调用执行GetModuleFileName路径不对

使用Pycharm开发,项目虚拟环境,调用DLL文件。在DLL文件中有如下代码:

extern "C" __declspec(dllexport) int get_path(TCHAR *res)
{
    setlocale(LC_ALL, "");
    //TCHAR szPath[MAX_PATH];
    GetModuleFileName(NULL, res, MAX_PATH);
    return 0;
}

在Python中调用:

from ctypes import *
path="C:\\Users\\sean\\source\\repos\\test_path\\x64\\Debug\\{}".format("test_dll.dll")
dll = windll.LoadLibrary(path)
c_array = c_wchar * 1024
psr=c_array()
c=dll.get_path(pointer(psr))
print("path1 ",psr.value)
import os,sys
exe_dir = os.path.split(sys.executable)[0]
print("path2 ",exe_dir)

执行结果:

path1  C:\ProgramFilesUser\python38\python.exe
path2  C:\Users\sean\Documents\CodeWorkSpace\ARTest_dev\venv\Scripts

我想问为什么函数GetModuleFileName获得的调用程序路径(也就是Python路径)会是系统中python路径而不是虚拟环境的路径?

是Python.exe 调用 “test.dll" 来执行程序, 所以path1 是Python 的路径。 

path2 是指当前的程序运行在哪个目录中。