Skip to content

Commit 38bcb96

Browse files
committed
window qtdrv.ui.dll load check
1 parent cd8aef3 commit 38bcb96

File tree

4 files changed

+57
-4
lines changed

4 files changed

+57
-4
lines changed

ui/app.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
package ui
66

7+
import (
8+
"log"
9+
)
10+
711
func Version() string {
812
return "0.1.1"
913
}
@@ -14,6 +18,10 @@ func Async(fn func()) {
1418
}
1519

1620
func Run(fn func()) int {
21+
if qtdrv_init_error != nil {
22+
log.Println(qtdrv_init_error)
23+
return -2
24+
}
1725
app := NewQApplication(nil)
1826
Async(func() {
1927
fn()
@@ -22,6 +30,10 @@ func Run(fn func()) int {
2230
}
2331

2432
func RunEx(args []string, fn func()) int {
33+
if qtdrv_init_error != nil {
34+
log.Println(qtdrv_init_error)
35+
return -2
36+
}
2537
app := NewQApplication(args)
2638
Async(func() {
2739
fn()

ui/cdrv.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,18 @@ var (
6666
fnErrHandler func(error, int32, int32, int) = DefaultErrorHandler
6767
)
6868

69+
var (
70+
qtdrv_init_error error
71+
)
72+
73+
func InitError() error {
74+
return qtdrv_init_error
75+
}
76+
77+
func IsLoaded() bool {
78+
return qtdrv_init_error == nil
79+
}
80+
6981
func (err Error) Error() string {
7082
switch err {
7183
case -1:
@@ -78,7 +90,7 @@ func (err Error) Error() string {
7890
return "unknown error"
7991
}
8092

81-
func init() {
93+
func cdrv_init() {
8294
C.init()
8395
}
8496

ui/cdrv_init.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// +build !windows
2+
3+
// Copyright 2015-2016 visualfc <[email protected]>. All rights reserved.
4+
// Use of this source code is governed by a BSD-style
5+
// license that can be found in the LICENSE file.
6+
7+
package ui
8+
9+
func init() {
10+
cdrv_init()
11+
}

ui/cdrv_windows.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,31 @@ import (
1212
import "C"
1313

1414
var (
15-
qtdrv_lib = syscall.NewLazyDLL("qtdrv.ui.dll")
16-
proc_qtdrv = qtdrv_lib.NewProc("qtdrv")
17-
proc_qtdrv_addr = proc_qtdrv.Addr()
15+
proc_qtdrv_addr uintptr = 0
1816
)
1917

2018
//export qtdrv
2119
func qtdrv(p unsafe.Pointer, typeid, funcid C.int, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 unsafe.Pointer) C.int {
2220
r0, _, _ := syscall.Syscall15(proc_qtdrv_addr, 15, uintptr(p), uintptr(typeid), uintptr(funcid), uintptr(p1), uintptr(p2), uintptr(p3), uintptr(p4), uintptr(p5), uintptr(p6), uintptr(p7), uintptr(p8), uintptr(p9), uintptr(p10), uintptr(p11), uintptr(p12))
2321
return C.int(r0)
2422
}
23+
24+
func load_qtdrv_proc() (uintptr, error) {
25+
lib, err := syscall.LoadDLL("qtdrv.ui.dll")
26+
if err != nil {
27+
return 0, err
28+
}
29+
proc, err := lib.FindProc("qtdrv")
30+
if err != nil {
31+
return 0, err
32+
}
33+
return proc.Addr(), nil
34+
}
35+
36+
func init() {
37+
proc_qtdrv_addr, qtdrv_init_error = load_qtdrv_proc()
38+
if qtdrv_init_error != nil {
39+
return
40+
}
41+
cdrv_init()
42+
}

0 commit comments

Comments
 (0)