2

最終的に C# で使用できるように、ネイティブ C++ SDK 用の Visual C++ ラッパーを作成する必要があるプロジェクトがあります。

SDK は、私が正しくインクルードしている .h ファイル (コンパイル エラーはありません) と、参照する必要があるいくつかの .lib ファイルで構成されています。そして、それはトリッキーな部分のようです。

この質問で説明したように、ライブラリの一部である関数を呼び出そうとすると、エラーが発生します。エラーは次のようになります。

error LNK2080: unresolved token (0A000027) "public: static class vhtIOConn *__clrcall vhtIOConn::getDefault(enum vhtICRConn::DeviceType)"
error LNK2019: unresolved external symbol "public: static class vhtIOConn * __clrcall vhtIOConn::getDefault(enum vhtIOConn::DeviceType)"

__clrdecl私が理解しているように、ネイティブ C++ が提供している間、C++/CLR は期待しています__clrcall

これについての適切な方法は何ですか?これが可能であることを多くの場所で読んだことがありますが、実際に動作する例は見たことがありません。Visual Studio 2010 を使用していることに注意してください。

4

1 に答える 1

1

リンカー エラーから何が問題なのかがわかります。エラー メッセージの __clrcall に注意してください。これは、ネイティブ C++ がネイティブ コードではなく、MSIL にコンパイルされているとコンパイラが認識していることを示しています。これは問題なくコンパイルされ、準拠した C++03 コードはすべて MSIL にコンパイルできますが、リンクしようとすると死んでしまいます。#pragma を使用して簡単に行うことができます。

#pragma managed(push, off)
#   include "foo.h"
#pragma managed(pop)
于 2013-04-02T12:18:36.190 に答える