2

私はこれをフォローしていますhttp://www.codeproject.com/Articles/10020/Using-managed-code-in-an-unmanaged-application

この例は、次の3つのバイナリで構成されています。

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

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

問題は、C ++ / CLIが.dllとしてコンパイルされているため、.libにコンパイルしようとすると、C++コードがC++/CLIコードとリンクされて失敗することです。

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

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

エラー

Error   1   error LNK2019: unresolved external symbol "__declspec(dllimport) public: static void __cdecl IMessageBoxWrapper::Destroy(class IMessageBoxWrapper *)" (__imp_?Destroy@IMessageBoxWrapper@@SAXPAV1@@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)" (__imp_?CreateInstance@IMessageBoxWrapper@@SAPAV1@XZ) referenced in function _main C:\Users\Zero\Desktop\UmanagedApp\UmanagedApp\main.obj  UmanagedApp
4

1 に答える 1

1

DLLがなくなったので、まったく使用__declspec(dllimport)しないでください。

実際、私はそれをクラスで使用することを強くお勧めしません。いずれにせよ、それは非常に壊れやすいものです。

したがってDLLAPI、すべてのクラス定義から削除するだけです。

于 2012-02-11T05:41:54.073 に答える