Ant*_*ell 5 c++ com interop managed-c++ unmanaged
我已经研究过这个到互联网的末端而没有找到一个真实的,可理解的,如何做到这一点的人类例子.
我有一个C#DLL加密和解密文本.
我不想/不具备在C++非托管代码中重写它的智能能力.所以我创建了一个与C#dll接口的C++/CLR类.
现在我需要知道如何从我的非托管代码中调用托管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;
}
Run Code Online (Sandbox Code Playgroud)
现在再一次我研究了这个.
我已经看到了allllllll糟糕/过于复杂的解释
我知道我需要使用一种叫做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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我只需要知道如何在非托管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;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误之一.
错误6错误C2653:'cSharpRiJHarn':不是类或命名空间名称
和
错误8 IntelliSense:无法打开源文件"C:/.../.../ Documents/Visual Studio 2010/Projects/unmannagedCPPExample/unmannagedCPPExample/Debug/cSharpRiJHarn.tlh"c:......\documents\visual studio 2010\projects\unmannagedcppexample\unmannagedcppexample\unmannagedcppexample.cpp