イメージリソースを埋め込むためにgo-bindata
を使ってgolangプログラムを作成していて、Asset(string) ([]byte, error)
関数を使用してリソースにアクセスしています。しかし、私の既存のライブラリのコードは次のように行く:それは[]byte
からロードイメージにサポートすることができますgolangのウィンドウ `syscall`からイメージリソースをロードするには?
func NewIconFromRawBytes(imgBytes []byte) (uintptr, error)
:
func NewIconFromFile(filePath string) (uintptr, error) {
absFilePath, err := filepath.Abs(filePath)
if err != nil {
return 0, err
}
hicon, _, _ := LoadImage.Call(
0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(absFilePath))),
IMAGE_ICON,
0,
0,
LR_DEFAULTSIZE|LR_LOADFROMFILE)
if hicon == 0 {
return 0, errors.New("load image failed: " + filePath)
}
return hicon, nil
}
どのように私はこの機能を書き換えることができますか?どんな助け?ありがとう。
編集:a similar c++ version questionがありますが、どうすればgolangに移植できますか。
なぜあなたは 'uintptr'を返すのですか? – Flimzy
'LoadImage'とは何ですか?あなたのコードには、答えを提供するために十分に説明されていない多くの仮定があるようです。 – Flimzy
@apxp:これは警告の意味ではなく、「安全でない」と表示されるときはいつでも盲目的に繰り返すことは役に立ちません。 '安全でない'パッケージは、Goの多くのものに必要です。 'sys' /' syscall'パッケージを使用し、正しく使用された場合は、将来のバージョンで完全にサポートされます。この警告は、内部実装やプラットフォーム固有の詳細に依存する方法で安全でないものを使用する可能性があることを意味します。単純にインポートすると、プログラムが非準拠になります。 – JimB