Как скомпилировать программу C ++ / CLI в .lib и связать ее с чистой неуправляемой программой C ++? - PullRequest
2 голосов
/ 11 февраля 2012

Я слежу за этим http://www.codeproject.com/Articles/10020/Using-managed-code-in-an-unmanaged-application

Пример состоит из 3 двоичных файлов:

  1. Код C #
  2. Код C ++ / CLI
  3. C ++ code

Код C ++ вызывает код C ++ / CLI, который затем вызывает код C #, для достижения способа запуска кодов C # из C ++.

Проблемав том, что C ++ / CLI скомпилирован как .dll, когда я попытался скомпилировать его в .lib, так что код C ++ и связать его вместе с кодом C ++ / CLI, не удается.

, так чтоконечный результат будет состоять только из двух двоичных файлов.

  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

1 Ответ

1 голос
/ 11 февраля 2012

Поскольку у вас больше нет DLL, вам вообще не следует использовать __declspec(dllimport).

На самом деле, я настоятельно не рекомендую использовать это на классах в любом случае, это очень хрупко.

Так что просто удалите DLLAPI из всех определений классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...