猿问

Go 无法在 DLL 中找到过程

为什么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应用程序正在生成没有任何问题(只是为了承认所有我的罪过!)。


烙印99
浏览 702回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答