想Sean 2021-01-26 23:50 采纳率: 0%
浏览 85

虚拟环境下,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路径而不是虚拟环境的路径?

  • 写回答

1条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2021-01-27 01:28
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。