2

私はLuaをC++プロジェクトに組み込むことを検討していますが、Luabinariesからのディストリビューションに2つのバイナリ(lua51.dllとlua5.1.dll)が存在することに少し混乱しています

ドキュメントによると...

Windowsでは、ライブラリまたはアプリケーションをスタブライブラリにリンクする必要があります。スタブライブラリは、DLLをLuaDLLにバインドする関数宣言のみを含むライブラリです。

なんで?サードパーティのDLLとリンクするときに、これまでスタブDLLが必要だったことはありませんか?

4

2 に答える 2

8

スタブライブラリは.libファイルであり、DLLではありません。これには、DLL内にエクスポートされたすべての関数の関数宣言が含まれており、DLL自体に呼び出しを転送するだけです。したがって、リンクするアプリケーションを作成する場合lua51.dllは、リンカにリンクするように指示するとlua51.lib、エクスポートされた関数へのすべての呼び出しがDLLに転送されます。これを行わなかった場合、リンク時に多くの「未解決の外部シンボル」エラーが発生します。

これは、DLLと静的にリンクする場合にのみ必要です(アプリケーションの実行時に自動的にロードされるようにするため)。を使用してDLLを動的にロードする場合は必要ありませんLoadLibrary

2つの異なるDLLがある理由について、マニュアルには次のように記載されています。

LuaBinaries DLLパッケージには、「lua51.dll」と呼ばれるdllプロキシがあります。他のディストリビューションからリリースされている他の「lua51.dll」を置き換えるために使用できます。呼び出しを「lua5.1.dll」に転送するだけです。転送に関係するコンパイル済みのソースコードはありません。

基本的に、一部の既存のアプリケーションはリンクしますがlua5.1.dll、他のアプリケーションはリンクしlua51.dll、両方をサポートしたいと考えています。いずれにせよ、これはスタブライブラリとは関係ありません。

于 2010-05-03T23:02:00.110 に答える
0

__declspec(import)と__declspec(export)とGetProcAddressの関係だと思います。しかし、実際にはわかりません。

于 2010-05-03T23:12:15.203 に答える