LuaInterfaceにロードする必要がある Lua モジュール ( lpack ) があります。プロジェクトでいくつかの異なる構成を試しましたが、リンクがわかりません。
エラーが発生しますunresolved external symbol "void __stdcall lua_replace(struct lua_State *,int)" (?lua_replace@@YGXPAUlua_State@@H@Z) referenced in function "int __stdcall l_unpack(struct lua_State *)" (?l_unpack@@YGHPAUlua_State@@@Z)
dumpbin /exports
lua51.lib ファイルで実行する?lua_replace@@YAXPAUlua_State@@H@Z
と、 Dependency Walker を使用して lua51.dll で見つけたものと一致するものを見つけることができる?lua_replace@@YAXPAUlua_State@@H@Z
ため、関数は存在しますが、名前は一致しません。
私はこのレベルのリンカー管理にあまり詳しくないので、これは私の単純なエラーかもしれません。lpack ビルドの値が lua51.lib 入力ファイルの値と一致しないのはなぜですか?
アップデート
lua51.dll および lua51.lib ファイル内のすべてのエクスポートは__cdecl
、私の lpack プロジェクトは に設定されてい__stdcall
ます。そのプロパティを変更すると (C/C++ -> Advanced -> Calling Convention の下)、コンパイルの問題が修正され、lpack.dll ファイルが作成されました。
ただし、lua からファイルをロードしようとするrequire('lpack')
と失敗します。The specified procedure could not be found.
LoadLibraryA でライブラリをロードする lua C コードを中断すると、NULL と 0x7F の GetLastError() コードが返されます。
更新 2
ロードしようとしていた lpack.dll ファイルは、間違った出力ディレクトリが原因で古くなったため、LoadLibrary の失敗が修正されました。次に GetProcAddress が失敗しextern "C"
ますが、Mud の推奨に従って lpack.c ファイルのエクスポート関数に追加すると、問題は解決しました。