为什么Go在dll中找不到指定的程序?
我有一个my.dll为 Windows x86 编译的库(操作系统是 Windows 7 x64;但我使用的是 Go x86 二进制文件 - 带有 LiteIDE - 并且 C# 代码也是为 x86 架构显式编译的)。我从 C# 中使用它并且它有效:
[DllImport("my.dll", EntryPoint = "my_function")]
public static extern double my_function(double x);
但是当我尝试从 Go 使用它时(在这里我只是想找到它):
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 specified procedure could not be found.。该my.dll文件与生成的文件位于同一目录中.exe。入口点名称 ( "my_function") 确实存在,因为它在 C# 中导入时工作正常并且没有说Failed to load my.dll: The specified module could not be found..
实际部分:我试图调用swedll32.dll的库是瑞士星历的核心库(可以在这里下载- GNU),只是为了测试这个场景,被调用的函数是swe_julday;使用此签名重现错误:
double swe_julday(
int year, int month, int day, double hour,
int gregflag); /* Gregorian calendar: 1, Julian calendar: 0 */
另一件事是我的GOROOT环境参数实际上是一个 NTFS 连接点(所以我可以在 x86 和 x64 版本之间切换) - 但我认为它不相关,因为输出.exe应用程序正在生成没有任何问题(只是为了承认所有我的罪过!)。
相关分类