2012-02-11 20 views
2

私はこのhttp://www.codeproject.com/Articles/10020/Using-managed-code-in-an-unmanaged-applicationC++/CLIプログラムを.libにコンパイルし、純粋なアンマネージC++プログラムとリンクするには?

の例では、3つのバイナリで構成され、次のよ:

  1. C#コード
  2. C++/CLIのコード
  3. C++コード

C++コードは上の呼び出し、 C++コードを呼び出してC++からC#コードを実行する方法を実現するC++/CLIコード。

問題は、C++/CLIは.lllにコンパイルしようとしたときに.dllとしてコンパイルされているため、C++コードと一緒にC++/CLIコードとリンクすると失敗します。

最終結果は2つのバイナリのみで構成されます。

  1. C#コード
  2. C++ --LINK-- C++/CLIのコード

あなたはもはやDLLを持っていないので、あなたが使用してはならないエラー

Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static void __cdecl IMessageBoxWrapper::Destroy(class IMessageBoxWrapper *)" ([email protected]@@[email protected]@Z) referenced in function _main C:\Users\Zero\Desktop\UmanagedApp\UmanagedApp\main.obj UmanagedApp 

Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class IMessageBoxWrapper * __cdecl IMessageBoxWrapper::CreateInstance(void)" ([email protected]@@[email protected]) referenced in function _main C:\Users\Zero\Desktop\UmanagedApp\UmanagedApp\main.obj UmanagedApp 
+0

C++コードからcliライブラリにリンクするときに、相対パス名の代わりに絶対パスを使用してみてください。 –

+0

返信いただきありがとうございます。 VS2010が.libを読み込んでいることを確認しました。 ManagedWrapper.libの名前をManagedWrapper1.libに変更したとき、ManagedWrapper.libを読むことができないと言われました。 – user25101622

答えて

1

__declspec(dllimport)はまったくありません。

実際には、私はどのクラスのクラスでもそれを使用することを強く推奨していません。非常に壊れやすいものです。

したがって、すべてのクラス定義からDLLAPIを削除してください。

+1

'__declspec(dllimport)'も廃止されましたか?私は欠点を理解していますが(私はそれらを最初に見たことがあります)、10年近く前に私が毎日使っていましたが、事実上の基準でした。新しいヒップ相当品はありますか? –

+0

それを釘付け。 :Pありがとう! – user25101622

+1

@ M.Babcock:これは、一貫したABIを持つ 'extern" C "関数でうまくいきます。しかし、クラスやクラスのメンバーはそうしません。 –

関連する問題