代码之家  ›  专栏  ›  技术社区  ›  Eli Finkel

Python ctypes在访问时发生访问冲突。exe导出函数

  •  1
  • Eli Finkel  · 技术社区  · 7 年前

    我将问题缩小到以下c++函数:(在vs2017上编译)

    #include <cstdio>
    __declspec(dllexport) void x()
    {
        FILE* out = stdout; // After debugging, this is where the access violation happens.
    }
    

    调用该函数时,我收到以下错误(与使用vs调试时显示的错误相同):

    ctypes.windll.<exe_name>.x()
    

    错误:

    OSError:异常:写入0x\u some\u地址时发生访问冲突

    关键因素是,上述文件被编译为EXE文件。

    在花了一些时间做这件事并尝试了一切之后,我尝试将上面的内容编译为DLL,现在它按预期工作。


    我(或多或少)了解内存管理的差异,但不了解细节。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mark Tolonen    7 年前

    https://www.codeproject.com/Articles/1045674/Load-EXE-as-DLL-Mission-Possible

    将EXE作为DLL加载的主要区别是:

    • 导入地址表配置不正确,这意味着对导入函数的所有调用都将崩溃。