プロジェクトにサードパーティのライブラリを追加する必要があり、.dllファイルしか提供していません(.libはありません)
Common Properties-> References-> Add New Referenceのプロジェクトプロパティページに移動して、プロジェクトにdllを追加しました
ソリューションエクスプローラーの[External Dependencies]フォルダーの下にdllが表示されるので、正しく含まれていたと思います。
しかし、どうすればDLLを参照できますか?インスタンス変数(たとえば、MCC :: iPort :: ASCII iPort)を追加してdllクラスにアクセスしようとすると、エラーが発生します。クラス名は、External Dependenciesのdll情報で確認できます。
.libファイルなしで裸のDLLにアクセスする唯一の方法は、DLL LoadLibrary()
、 GetProcAddress()
でアクセスしたいエクスポートされた関数へのポインタを取得し、次に、それらのポインタを適切な関数シグネチャにキャストします。ライブラリがC++関数をエクスポートする場合、GetProcAddress()
に渡す必要がある名前はマングルされます。エクスポートされた名前は でリストできますdumpbin /exports your.dll
。
extern "C" {
typedef int (*the_func_ptr)( int param1, float param2 );
}
int main()
{
auto hdl = LoadLibraryA( "SomeLibrary.dll" );
if (hdl)
{
auto the_func = reinterpret_cast< the_func_ptr >( GetProcAddress( hdl, "the_func" ) );
if (the_func)
printf( "%d\n", the_func( 17, 43.7f ) );
else
printf( "no function\n" );
FreeLibrary( hdl );
}
else
printf( "no library\n" );
return 0;
}
他の人が指摘したように、LIBファイルを作成できます。エクスポートされた関数のリストをdumpbin /exports your.dll
から取得します。
ordinal hint RVA name
1 0 00001000 adler32
2 1 00001350 adler32_combine
3 2 00001510 compress
(etc.)
名前をDEFファイルに入れます。
EXPORTS
adler32
adler32_combine
compress
(etc.)
次に、LIBファイルを作成します。
lib /def:your.def /OUT:your.lib
C++の名前のマングリングまたは32ビットのstdcall
呼び出し規約によって名前が装飾されている場合は、報告された名前dumpbin
、マングリングなどすべてをコピーして貼り付けます。
.lib
ファイルがない場合は、.dll
から作成できます。
https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/
お役に立てば幸いです。