外部の.dllと一緒に.libファイルを作成して、それに対してコードをコンパイルできるようにしようとしています(VS2010)。この外部ライブラリ関数は __stdcall を使用して宣言されており、__declspec(dllimport) を指定していません。例:
extern "C"
{
int __stdcall exampleFunction(int firstArgument);
}
私は次のことを試しました:
.def から .lib を作成
次のように .def ファイルを作成します。
EXPORTS
method_1
method_1@16 @1 ; ordinal from dumpbin
...
次に、これから.libを作成します
lib /MACHINE:x86 /def:my_def_file.def OUT:my_library.lib
コードは正常にリンクされますが、DLL からメソッドを最初に呼び出すときに「特権命令」例外がスローされます。
.obj から .lib を作成する
このKBで詳しく説明されているように、スタブ関数のセットを作成し、それらを .obj ファイルにコンパイルして、そこから .lib を作成するという別の可能性があります。ただし、kbページの例を機能させることさえできません。
// my_library.cpp
extern "C" __declspec(dllexport) void _stdcall Function(void) {}
このファイルで必要なコマンドを実行すると、次のようになります。
CL /c /Ob0 my_library.cpp
lib /def:my_library.obj /MACHINE:x86
次に、my_library.obj を開くと、予想どおり文字列 "_Function@0" が表示されますが、my_library.lib にはこの痕跡は表示されません。さらに、lib コマンドを実行すると、ファンキーな警告メッセージが表示されます。
hasp_api.obj : warning LNK4017: L☺♥ statement not supported for the target platform; gnored
hasp_api.obj : warning LNK4017: ► statement not supported for the target platform; ignored
私はすべて平和と愛を求めていますが、私はちょっと立ち往生していて、それが私を夢中にさせています.上記の方法のいずれかで助けていただければ幸いです!