0

厄介なリンカーエラーに問題があり、解決策を見つけるためのヒントをいただければ幸いです。

エラーを理解する方法では、リンカはクラス「BFStream」で「read」という名前の関数の実装を見つけるのに問題があります。コードには、クラスBFStreamのヘッダーが含まれています。QRFound.dllからエクスポートされた関数を受け取るインポートライブラリQRFound.libがあります。dllとlibは、どちらもファイルシステムのlibディレクトリにあります。libディレクトリは、プロジェクトのプロパティの2つの場所(VC++ディレクトリ->ライブラリディレクトリとリンカー->追加のライブラリディレクトリ)で提供されます。QRFound.libは、[リンカー]->[入力]->[追加の依存関係]で指定され、リストの最初にあります。

QRFound.dllにBFStream::readの実装が含まれていることはわかっています。これは、依存関係ウォーカーを使用して表示したためです。しかし、C ++の装飾は、私が疑わしいリンカーエラーとは少し異なります。?read@BFStream@@QAE_NPADH@Z

リンカエラーは次のとおりです。

1>     Creating library C:\MyProj\Debug\MyDisplay.lib and object C:\MyProj\Debug\MyDisplay.exp
1>MyCmdReceiver.obj : error LNK2001: unresolved external symbol "public: bool __thiscall BFStream::read(char *,__int64)" (?read@BFStream@@QAE_NPAD_J@Z)
4

2 に答える 2

3

シンボルでundname.exeユーティリティを実行すると、次のようになります。

Undecoration of :- "?read@BFStream@@QAE_NPADH@Z"
is :- "public: bool __thiscall BFStream::read(char *,int)"

したがって、はい、明らかに最後の引数の不一致は一致__int64しませんint。メソッドの実際の宣言を投稿しなかったので、この不一致がどのように発生したかを適切に推測することはできません。ある種のマクロスープの問題だと思います。

于 2012-06-13T15:03:07.057 に答える
0

別のコンパイラでビルドされたDLLを呼び出していると思われます。

DLLのソースがある場合は、現在のコンパイラでビルドします。名前マングリングは一貫しており、問題を解決できるはずです。

DLLのソースがない場合は、COMインターフェイスがあるかどうかを確認してください。

于 2012-06-13T14:45:45.407 に答える