Articles of 走

无法在DLL中查找过程

为什么不能在dll中find指定的程序? 我有一个为Windows x86编译的my.dll库(操作系统是Windows 7 x64;但是我使用的是Go x86二进制文件 – LiteIDE – 而C#代码也是针对x86体系结构进行了显式编译的)。 我从C#使用它,它的工作原理: [DllImport("my.dll", EntryPoint = "my_function")] public static extern double my_function(double x); 但是,当我尝试使用它(在这里我试图find它)​​从通过: var ( dllMine = syscall.NewLazyDLL("my.dll") my_function = dllMine.NewProc("my_function") ) func main() { err := my_function.Find() if err != nil { fmt.Println(err) return } //… } 它说Failed to find my_function procedure in my.dll: The […]

ngrok如何在防火墙后面工作?

Ngrok( https://ngrok.com/ )应该允许您通过转发将本地端口和服务展示给万维网。 但是,如果我打开我的本地机器上的端口80,如下所示: ngrok 80 我回来了: Tunnel Status online Version 1.3/1.3 Forwarding http://3a4bfceb.ngrok.com -> 127.0.0.1:80 Forwarding https://3a4bfceb.ngrok.com -> 127.0.0.1:80 Web Interface http://127.0.0.1:4040 # Conn 0 Avg Conn Time 0.00ms 据我所知,任何对http://3a4bfceb.ngrok.com的请求都将通过端口80发送到本地计算机,但如果我坐在阻止传入通信的NAT /防火墙之后(这是一种非常常见的情况)。 ngrok是否会启动轮询请求以确定何时收到数据?

如何为GOPATH使用Samba服务器位置?

我正在尝试将我的GOPATH设置为共享的networking文件夹。 当我进入 export GOPATH=smb://path/to/shared/folder 我得到: go: GOPATH entry is relative; must be absolute path: "smb". Run 'go help gopath' for usage. 我也试着以w /“/”作为path前缀,但是它试图在根目录下创build一个文件夹。 谢谢!

golang:跨平台path.Dir

我想在Unix和Windows上使用path.Dir()和平台特定的目录。 请看代码: package main import ( "fmt" "path" ) func main() { fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c")) fmt.Println(`path.Dir("c:\foo\bar.exe"): `, path.Dir(`c:\foo\bar.exe`)) } 这输出 path.Dir("a/b/c"): a/b path.Dir("c:\foo\bar.exe"): . 我想第二次调用path.Dir() (窗口)的东西 c:\foo 是否有可能告诉path.dir()使用Windows分隔符为我的程序在Windows上运行? 或者我应该总是将反斜杠\转正斜杠( / )? 这里的首选策略是什么?

Golang:调用Windows DLL函数

我正在写一个Go应用程序,调用到一个Windows DLL。 该DLL是用MSVC编写的,并使用__declspec(dllexport)具有外部“C”导出。 我的Go应用程序的顶部如下: //#cgo CFLAGS: -IC:/Repos/Module/include //#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll //#include <MyModule.h> import "C" 我从模块调用函数如下所示: nRet := C.moduleImpl_len() 问题是,当我尝试运行这个应用程序,我得到以下错误: C:\Users\MINDO~1\AppData\Local\Temp\go-build836751819\mod\modimpl\_obj\modimpl.cgo2.o: In function `_cgo_e2aaf076ab69_Cfunc_moduleImpl_len': C:/Repos/Module/go/src/mod/modimpl/modimpl.go:90: undefined reference to `moduleImpl_len' 我用DUMPBIN查看了DLL导出的符号,并且显示了正确的“moduleImpl_len”作为导出的符号。 这也是MyModule.h中定义的符号。 任何build议,我怎样才能得到符号链接,而不必去系统调用路线?

WSARecv不停止阅读

所以基本上,我使用WSARecv与我的客户端的这个function: type Conn struct { sd s.Handle sa s.SockaddrInet4 } func (c *Conn) Read(b []byte) (int, error) { dataBuf := s.WSABuf{Len: uint32(len(b)), Buf: &b[0]} flags := uint32(0) qty := uint32(0) err := s.WSARecv(c.sd, &dataBuf, 1, &qty, &flags, nil, nil) return int(qty), err } 同时服务器发送多个数据包(首先是8个字节,然后都是1000个字节)。 会发生什么情况是WSARecv在缓冲区b已满时不会停止读取。 所以当我记忆太多的时候,我得到了一个很难的答案: exception0xc0000005 0x8 0xc08203195f 0xc08203195f PC = 0xc08203195f syscall.Syscall9(0x7ff86cafe230,0x7,0x1f8,0xc08200b5d0,0x1,0xc08200b5f0,0xc08200b5e0,0x0,0x0,0x0,…)(十几行这样的行) 而我的程序崩溃当然。 […]

GOPATH值设置

我安装go1.3.1.windows-amd64.msi,安装GOROOT后是默认设置,我在PATH中findD:\ Programs \ Go \ bin,然后创build一个GOPATH环境variables'go get'命令发生错误: 包github.com/coreos/etcd:不能下载,$ GOPATH不能设为$ GOROOT。 欲了解更多详情,请参阅:去帮助gopath 操作系统:Windows 7 GOPATH会与GOROOT冲突? 我如何设置这两个PATH值?

如何通过Go请求Windows上的pipe理权限

我想为我的应用程序实现的是,不需要右键单击并select以pipe理员身份运行,每次我想运行它。 我希望Windows提示我获得pipe理权限与其他Windows应用程序一样。 考虑下面的代码: package main import ( "fmt" "io/ioutil" "time" ) func main() { err := ioutil.WriteFile("C:/Windows/test.txt", []byte("TESTING!"), 0644) if err != nil { fmt.Println(err.Error()) time.Sleep(time.Second * 3) } } 如果你编译它并双击它将会打印: 打开:C:\ Windows \ test.txt:访问被拒绝。 但是,如果右键单击并以pipe理员身份运行,则会创build并写入该文件。 如何通过双击来请求pipe理权限?

golang:在Windows上运行pdf文件的默认应用程序

我想从默认应用程序中打开文件系统中的PDF文件。 我怎样才能做到这一点? 从命令行我只写PDF文件的文件名和应用程序打开(与请求的文件)。 当我尝试使用exec.Command()我得到一个错误(不奇怪) exec: "foo.pdf": executable file not found in %PATH% 。 package main import ( "log" "os/exec" ) func main() { cmd := exec.Command("foo.pdf") err := cmd.Start() if err != nil { log.Fatal(err) } err = cmd.Wait() if err != nil { log.Fatal(err) } }

双重引用的论点

我想执行使用exec包find Windows命令,但Windows正在做一些奇怪的转义。 我有这样的: out, err := exec.Command("find", `"SomeText"`).Output() 但是这是抛出错误,因为Windows正在转换这find /SomeText" 有谁知道为什么? 我如何使用exec包在Windows上执行find ? 谢谢!