vim docs声明我必须为我所有的函数使用C调用约定。 考虑到这一点,我写了一个最低限度的dll来查看一切是否正常。库调用失败C++ dll
#include <string>
std::string _declspec(dllexport) Meow() {
std::string Meow = "Meow!";
return Meow;
}
对于编译我写了一个makefile
test.dll: test.cpp
cl /LD test.cpp
clean:
del *.obj
del *.dll
del *.exp
del *.lib
编译没有任何问题,并复制该dll到我的vim的目录。 在我的理解,通过调用函数
:call libcall("test.dll","Meow",0)<cr>
应该工作。但是我不断收到Error 364:“Meow()”的库调用失败。 将libcall中的.dll名称更改为不存在的内容会导致相同的错误,因此我得出的结论是我的dll有问题。 但是,然后再次我的DLL编译没有任何问题, 这让我感到困惑。
Oooohhh,我看到改变的返回类型为一个字符指针,并添加外部的“C”,以防止名字改编和它的工作。感谢队友 –