Долгое время у меня была проблема с проектом, который я должен реализовать в своем, я объясню вам.
Моя цель - вызвать класс C ++ из C #приложение ( проект 1 ), проблема в том, что проект C ++ ( проект 3 ) не совместим с CLR.
То, что я сделал до сих пор, имеетпромежуточный проект также был создан в неуправляемом C ++ ( Project 2 ) для совместимости с проектом 3.
Project 2 состоит из очень простого метода, которыйинициализирует класс из проекта 3 и использует этот объект для различных операций.
Я работаю в Visual Studio, и он не выдает ошибку при компиляции, но во время выполнения я получаю следующую ошибку:
Невозможно загрузить файл DLL 'PROJECT-ROUTE \ Project2.dll': указанная процедура не найдена.(Исключение из HRESULT: 0x8007007F) в project1.process ()
Дело в том, что предыдущая ошибка появляется только тогда, когда в методе project2 я инициализирую класс из проекта 3, если я комментирую инициализациютогда все идет хорошо, я не могу понять, почему между двумя C ++ проектами одного и того же типа возникают такие проблемы.
Может кто-нибудь мне помочь?
спасибо
Код C # (проект 1)
private const string DllFilePath = @"PATH_TO_DLL\Proyect2.dll";
[DllImport(DllFilePath, CallingConvention = CallingConvention.Cdecl, EntryPoint = "process")]
public extern static void process();
[HandleProcessCorruptedStateExceptions]
public static string Prox(string a, string b)
{
string str = "OK";
try
{
process();
}
catch (System.AccessViolationException exception)
{
return exception.Message + " " + exception.StackTrace;
}
catch (Exception exception)
{
return exception.Message + " " + exception.StackTrace + " ";
}
return str;
}
}
Средний проект Неизмененный код C ++ (проект 2)
Project2.h
#include <stdexcept>
#include "Project3.h"
using namespace std;
namespace FinalProcess
{
extern "C" { __declspec(dllexport) void __cdecl process(); }
}
Project2.cpp
#include "Project2.h"
#include <iostream>
#include <chrono> // To measure execution time
namespace FinalProcess
{
void process()
{
OCTA::Analyzer& ld = OCTA::Analyzer::getInstance(); // <-- Singleton
// if I comment this line then it goes well
}
}