1

外部の.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

私はすべて平和と愛を求めていますが、私はちょっと立ち往生していて、それが私を夢中にさせています.上記の方法のいずれかで助けていただければ幸いです!

4

0 に答える 0