c ++ CLR для соединения c ++ dll с приложением ac # - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь следовать этому примеру: http://blogs.artinsoft.net/Mrojas/archive/2008/06/19/Log4NET-for-C++.aspx

, чтобы запустить Log4Net в c ++ dll.

Я создал пустой проект CLR, изменил тип вывода на lib и добавил следующий код:

// Bridge.cpp

#include <atlstr.h>

using namespace System;

/// <summary>

/// Example of how to simply configure and use log4net

/// </summary>
ref class LoggingExample
{
private:
    // Create a logger for use in this class
    static log4net::ILog^ log = log4net::LogManager::GetLogger("LoggingExample"); static LoggingExample()
    {
        log4net::Config::BasicConfigurator::Configure();
    }


public:static void ReportMessageWarning(char* msg)
{
    String^ data = gcnew String(msg);
    log->Warn(data);
}
       static void ReportMessageError(char* msg)
       {
           String^ data = gcnew String(msg);
           log->Error(data);
       }

       static void ReportMessageInfo(char* msg)
       {
           String^ data = gcnew String(msg);
           log->Info(data);
       }static void ReportMessageDebug(char* msg)
       {
           String^ data = gcnew String(msg);
           log->Debug(data);
       }
};

extern "C"
{

    _declspec(dllexport) void ReportMessageWarning(char* msg)
    {
        LoggingExample::ReportMessageWarning(msg);
    }
    _declspec(dllexport) void ReportMessageError(char* msg)
    {
        LoggingExample::ReportMessageError(msg);
    }

    _declspec(dllexport) void ReportMessageInfo(char* msg)
    {
        LoggingExample::ReportMessageInfo(msg);
    }

    _declspec(dllexport) void ReportMessageDebug(char* msg)
    {
        LoggingExample::ReportMessageDebug(msg);
    }
}

Я создал проект консольного приложения c ++ и добавил этот код:

#include "stdafx.h"
#include <iostream>
#include <atlstr.h>


extern "C"
{

    //log4net from the wrapper lib
    _declspec(dllimport) void ReportMessageWarning(char* msg);

    __declspec(dllexport) void RunTest() 
    {
        std::string message = "hey it seems it is working";
        ReportMessageWarning(_strdup(message.c_str()));
    }


}

Это будет dll c ++, который вызывается из другого приложения C #.Я скомпилировал библиотеку clr и соединил ее в зависимостях приложения c ++.

Однако dll c ++ не будет компилироваться как есть, что дает мне:

Error LNK2001 unresolved external symbol __imp_ReportMessageWarning

Что я здесь пропустил?

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