Вызов библиотеки DLL C++ из приложения C#
У меня есть C# в качестве моего фронтального приложения, и я хочу вызвать c++ dll из моего c#, но я получаю ошибку. Я публикую свой код здесь Пожалуйста помогите мне решить эту проблему:
Программы.в CS
using System; using System.Runtime.InteropServices; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestCSharp { class Program { [DllImport("C:\\Users\\xyz\\source\\repos\\Project1\\Debug\\TestCpp.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void DisplayHelloFromDLL(StringBuilder name, int appId); static void Main(string[] args) { try { StringBuilder str = new StringBuilder("name"); DisplayHelloFromDLL(str, str.Length); str.Clear(); } catch(DllNotFoundException exception) { Console.WriteLine(exception.Message); } catch(Exception exception) { Console.WriteLine("General exception " + exception.Message); } finally { Console.WriteLine("Try again"); } } } }
и код cpp, как показано ниже:
Заголовок: source.h
#include <string> using namespace std; extern "C" { namespace Test { class test { public: test(); __declspec(dllexport) void DisplayHelloFromDLL(char * name, int appId); } } }
класс c++: source.cpp
#include <stdio.h> #include "CppSource.h" Test::test::test() { printf("This is default constructor"); } void Test::test::DisplayHelloFromDLL(char * name, int appId) { printf("Hello from DLL !\n"); printf("Name is %s\n", name); printf("Length is %d \n", appId); }
Код строится успешно, но когда я запускаю это, я получаю Не удалось найти точку входа названный "DisplayHelloFromDLL" в DLL.
Тот же самый CPP-код, когда я пишу без использования пространства имен и класса, он работает нормально. т. е.
Заголовок: source.h
extern "C" { __declspec(dllexport) void DisplayHelloFromDLL(char * name, int appId); }
класс c++: source.cpp
#include "CppSource.h" void DisplayHelloFromDLL(char * name, int appId) { printf("Hello from DLL !\n"); printf("Name is %s\n", name); printf("Length is %d \n", appId); }
Итак, как я могу использовать DLL, которая имеет пространства имен и claases в моем приложении c#?
Что я уже пробовал:
Все, что я пробовал, было опубликовано в этом вопросе.