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」,以防止名字改編和它的工作。感謝隊友 –