亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

沒有從可執行文件通過Windows Powershell pinvoke go c-shared

沒有從可執行文件通過Windows Powershell pinvoke go c-shared

Go
嚕嚕噠 2022-08-15 16:42:22
這里有一個奇怪的 - 通過Powershell從golang c共享dll的函數pinvoke之后,可執行文件的后續執行(例如hostname.exe,ipconfig等)顯示沒有輸出到stdout。僅當powershell是調用dll函數的那個時才會發生這種情況(Windows上的python不會重現此問題)。我做了什么?我用一個導出的函數(HelloWorld)交叉編譯了最簡單的c共享dll,我可以為Windows編譯。然后,我從Powershell調用了dll。go 代碼是:package mainimport "C"import (        "fmt")//export HelloWorldfunc HelloWorld() {        fmt.Println("Hello World")}func main() {}使用的構建命令(來自 linux)是:GOARCH=amd64 GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -v -buildmode=c-shared -o helloworld.dll .然后,我將生成的.dll復制到Windows,并使用以下Powershell腳本調用HelloWorld()函數:$signature = @"[DllImport("c:\\cshared\\helloworld.dll")]public static extern void HelloWorld();"@Add-Type -MemberDefinition $signature -Name World -Namespace Hello[Hello.World]::HelloWorld()我期待看到什么?我希望dll的HelloWorld()函數被成功調用(導致文本“Hello World”寫入控制臺),然后我希望能夠使用我的powershell提示符來執行進一步的控制臺命令,如“主機名”或“ipconfig”等。我看到了什么?這真的很奇怪。HelloWorld()函數確實已成功執行,我在控制臺上看到文本“Hello World”。但是,在調用該函數后,我不再能夠在 powershell 窗口中看到來自 cmd.exe 命令的任何控制臺輸出。例如,調用“hostname”只是返回沒有輸出,“ipconfig”也是如此。例如,最初主機名.exe工作并提供輸出,但在執行cshared dll后,我無法看到主機名的任何進一步輸出??刂婆_上的 exe:PS C:\cshared> hostnamenick-hostPS C:\cshared> hostnamenick-hostPS C:\cshared> .\helloworld.ps1Hello WorldPS C:\cshared> hostnamePS C:\cshared> ipconfigPS C:\cshared> hostname如果我通過管道將 hostname.exe 的輸出傳遞到一個文件(例如,“hostname > out.txt”),那么我可以確認輸出是否存在并且命令是否成功(如果您將可執行命令通過管道傳輸到“Out-Host”cmdlet,也會發生同樣的情況)。所以似乎執行c共享的dll以某種方式導致stdout被重定向或無法正確顯示?或者關于PS會話的編碼要中斷的東西?我嘗試刪除 fmt。Println從go代碼中查看是否有幫助,但問題仍然是一樣的。我也只在Powershell中看到這一點(如果我做同樣的實驗,但從Windows上的python調用helloworld.dll,我之后在shell中沒有看到任何問題)。有什么想法嗎?
查看完整描述

1 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

這已被Windows的控制臺所有者識別為golang本身中的錯誤。go問題線程在這里:https://github.com/golang/go/issues/44876


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號