[問題] call c++ dll

看板Python作者 (我不是竹中人)時間11年前 (2014/10/07 20:20), 11年前編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
我剛學寫python不久,遇到了一個問題,想請教板上的高手們。 我目前手上有一個dll檔 裡面的function TestA(),有另一隻C++的程式可以用。 所以可以確定這隻dll檔裡有TestA()這個function 並且是可以work的 我想用python呼叫這個TestA() 以下為程式碼 from ctypes import cdll dll1 = cdll.LoadLibrary( "TestFunction.dll");; testResult = dll1.TestA(); 在執行到最後一行的時候,出現錯誤 AttributeError: function 'TestA' not found 我有上網google過,發現有可能的原因是因為沒有 extern "C" _declspec(dllexport) 但是那隻dll的原始碼我拿不到,所以請想問板上的高手們, 遇到這種情況該如何做才能使python認識"TestA"這個function? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.187.102 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1412684409.A.B71.html

10/07 20:57, , 1F
10/07 20:57, 1F

10/07 20:58, , 2F
開 CFF Explorer 來看 Export Directory 看函式名稱
10/07 20:58, 2F

10/07 21:00, , 3F
有列出名字或 Ordinal 的就有機會透過 ctypes 來操作
10/07 21:00, 3F

10/07 21:01, , 4F
然而,如果函式被 name mangling 後就會比較尷尬一點
10/07 21:01, 4F

10/07 21:02, , 5F
最重要的還是先搞清楚,到底要操作的是不是叫 TestA
10/07 21:02, 5F

10/07 22:17, , 6F
八成是 name mangling 的關係, 就看要怎麼拿到真名了
10/07 22:17, 6F
非常感謝兩位,TestA真的被改掉了 我後來是用 getattr 去解決 只碰python不到一個禮拜,以後還請各位高手們多多指教了 <(_ _)> ※ 編輯: gts2590 (203.196.98.24), 10/08/2014 11:02:26
文章代碼(AID): #1KCzfvjn (Python)
文章代碼(AID): #1KCzfvjn (Python)