以下の更新をご覧ください
(解決済み) また、これを次の 2 番目の質問に拡張しました。C# DLL COM ファイルをアンマネージ C++ プログラムに実装します。
私はこれをインターネットの最後まで調査しましたが、これを行う方法の実際の、理解可能な、人間の例は見つかりませんでした.
テキストを暗号化および復号化する 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;
}
今もう一度私はこれを研究しました。
私はすべての悪い/過度に複雑な説明を見てきました
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;
}
これは私が得ているエラーの1つです。
エラー 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