簡體   English   中英

訪問.exe導出函數時,Python ctypes訪問沖突

[英]Python ctypes access violation when accessing an .exe exported function

通過python上的ctypes調用導出的c ++函數時,遇到訪問沖突。

我將問題縮小為以下c ++函數:(在vs2017上編譯)

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

調用該函數時,出現以下錯誤(使用vs調試時顯示的相同錯誤):

Python代碼:

ctypes.windll.<exe_name>.x()

錯誤:

OSError:異常:訪問沖突寫入0x_some_address

關鍵因素是,以上已被編譯為EXE。
(當我導出一個調用“ main”入口點的函數時,整個過程就開始了)

在花了一些時間並嘗試了所有方法之后,我嘗試將上述內容編譯為DLL,現在可以正常工作了。

所以問題是,有人可以向我解釋是什么引起了問題嗎?
我(或多或少)知道內存管理的差異,但細節不了解。

謝謝。

本文似乎提供了足夠的背景信息以及對此問題的可能解決方案: https : //www.codeproject.com/Articles/1045674/Load-EXE-as-DLL-Mission-Possible

將EXE加載為DLL的主要區別是:

  • CRT未初始化,包括任何全局變量,並且
  • 導入地址表配置不正確,這意味着對導入函數的所有調用都會崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM