Как вызывать управляемые методы C ++ из неуправляемого C ++
Я исследовал это до конца Интернета, не найдя реального, понятного, человеческого примера того, как это сделать.
У меня есть C # DLL, которая шифрует и дешифрует текст.
Я не хочу / не обладаю интеллектуальной способностью переписать это в неуправляемом коде C ++. Поэтому вместо этого я создал класс C ++ / CLR, который взаимодействует с DLL C #.
СЕЙЧАС мне нужно знать, как вызвать управляемый C ++ из моего неуправляемого кода.
Вот мой управляемый код, и он проверен, что он работает
// clrTest.cpp : main project file.
#include "cSharpRiJHarn"
#include "stdafx.h"
#include <string>
#include <stdio.h>
using namespace cSharpRiJHarn;
using namespace System;
String^ Encrypt(String ^s)
{
return RijndaelLink::encrypt(s);
}
String^ Decrypt(String ^s)
{
return RijndaelLink::decrpyt(s);
}
int main()
{
//Console::WriteLine(Encrypt("It Works"));
//Console::WriteLine(Decrypt(Encrypt("It Works")));
//Console::ReadLine();
return 0;
}
Теперь, когда я снова исследовал это.
Я видел все плохие / слишком сложные объяснения
Я знаю, что мне нужно использовать что-то под названием COM или Interop
Я не знаю, как это работает, и я просто ищу очень простое объяснение.
Спасибо за помощь.
ОБНОВИТЬЯ превратил C # DLL в COM-файл
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace cSharpRiJHarn
{
[Guid("GuiD CODE REMOVED")]
public interface DBCOM_Interface
{
[DispId(1)]
String encrypt(string s);
[DispId(2)]
String decrpyt(string s);
}
[Guid("GuiD CODE REMOVED"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface DBCOM_Events
{
}
[Guid("GuiD CODE REMOVED"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(DBCOM_Events))]
public class RijndaelLink : DBCOM_Interface
{
public String encrypt(String s)
{
return Rijndael.EncryptString(s);
}
public String decrpyt(String s)
{
return Rijndael.DecryptString(s);
}
}
}
Теперь мне просто нужно знать, как реализовать это в неуправляемом C ++ ... Я попробовал как добавить только файлы в проект C ++, так и добавить весь проект cSharpRiJHarn в это решение. Ни одна из них не работает.
#import "cSharpRiJHarn"
#include "stdafx.h"
#include <string>
#include <stdio.h>
#include <iostream>
//using namespace cSharpRiJHarn;
int main(){
cSharpRiJHarn::RijndaelLink::encrypt("It works");
char ch;
std::cin>>ch;
return 0;
}
Это одна из ошибок, которые я получаю.
Ошибка 6 ошибка C2653: «cSharpRiJHarn»: не является именем класса или пространства имен
а также
Ошибка 8 IntelliSense: невозможно открыть исходный файл "C: /.../.../ Documents / Visual Studio 2010 / Проекты / unmannagedCPPExample / unmannagedCPPExample / Debug / cSharpRiJHarn.tlh" c: ...... \ Documents \ visual студия 2010 \ projects \ unmannagedcppexample \ unmannagedcppexample \ unmannagedcppexample.cpp