私はC#プログラマーで、C++/CLIラッパーを作成しようとしています。私はちょうどテストをやっているC++ DLL VS2015 - C++ DLLとのCRLのリンク
- ので、私はこれらの実装だ:私は、ソリューション内の3つのプロジェクトを持っている を
C++ DLL Testing.h:
C++ DLL Testing.cpp
#include "Testing.h" int Test::Increment() { return counter++; }
CLR Wrapper.h
#pragma once #include "Testing.h" using namespace System; namespace Wrapper { public ref class Wraptest { public: Wraptest(); int Increment(); private: Test* t; }; }
CLR Wrapper.cpp
#include "stdafx.h" #include "Wrapper.h" #include "PITest.h" Wrapper::Wraptest::Wraptest() { t = new Test(); } int Wrapper::Wraptest::Increment() { return t->Increment(); }
WrapperプロジェクトのTesting C++ DLLプロジェクトへの参照を追加しました。また、WrapperのAdditional IncludesにDLLソリューションヘッダーファイルを追加しました。
C++ DLLプロジェクトがうまく構築し、私はラッパーのプロジェクトをビルドするとき、私はこれらのエラーを取得:
重大度コード説明プロジェクトファイルの行の抑制状態 エラーLNK2028未解決のトークン(0A000007)「公共:__thiscallテスト"public:__clrcall Wrapper :: Wraptest :: Wraptest(void)"(0Wraptest @ Wrapper @@ $$ FQ $ AAM)で参照されている ":: Test(void)"(?? 0Test @@ $$ FQAE @ XZ) @XZ)ラッパーC:\ Users \ mytoy \ Documents \ Visual Studio 2015 \ Projects \ CodeTest \ Wrapper \ Wrapper.obj 1
重大度コード説明プロジェクトファイルの行の抑制状態 エラーLNK2019未解決の外部シンボル "public:__cliscall Wrapper :: Wraptest :: Wraptest(void)"で参照される "public:__thiscall Test :: Test(void)"(?? 0Test @@ $ FQAE @ XZ) ?0Wraptest @ Wrapper @@ $$ FQ $ AAM @ XZ)ラッパーC:¥Users¥mytoy¥Documents¥Visual Studio 2015¥Projects¥CodeTest¥Wrapper¥Wrapper.obj 1
重大度コード説明プロジェクトファイルの行抑止状態 エラーLNK1120 2つの未解決の外部ラッパーC:プロジェクト\ CodeTest \デバッグ\ Wrapper.dll \ Visual Studioの2015 \ \ Users \ユーザーmytoy \文献1
私は解決策を把握することはできません。おかげさまで
_Wrapper_プロジェクトのプロジェクトプロパティのLinker ** Imports **セクションに** Testing.lib **を追加する必要はありませんか? – MickyD
問題は、呼び出し規則が誤って一致しているように見えます。この[リンク](https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-data-with-platform-invoke)からプラットフォームの呼び出しでデータをマーシャリングする手がかりを得るかもしれません。 –
これは単純なリンカーエラーですが、Test :: Increment()について不平を言っていないことは間違いです。クラスがネイティブDLLからエクスポートされていることを確認するために行ったことはまったく明らかではありません。不完全な.defファイルだけが合理的な推測です。 Increment()だけでなく、クラス全体を確実にエクスポートするには、クラス宣言でdllexport/dllimport属性のダンスを行う必要があります。 DLLの代わりに静的ライブラリとしてネイティブコードをビルドするのも簡単です。 –