Visual Studio 2019 を使って、C#から呼び出されるdllを作成しています
ただ、最近のVisualStudioはCLIのDLLのテンプレートがなくなっていて、
どのように設定すればいいのかわかりません
現在、以下の方法でC++/CLIのソースをコンパイルしています
新規プロジェクト→空のプロジェクト(C++)
プロパティを以下のように設定
全般
構成の種類:ダイナミックライブラリ
文字セット:Unicode
共通言語ランタイムサポート:共通言語ランタイムサポート(/clr)
C/C++ コマンドライン
/Zc:twoPhase-
ソース
C++/CLI
1#include <iostream> 2#include <msclr/marshal_cppstd.h> 3 4public ref class Sample 5{ 6public: 7 Sample(); 8 9 void Print(System::String^ str) { 10 std::wstring wstr = msclr::interop::marshal_as <std::wstring>(str); 11 12// System::Console::WriteLine(str); 13 std::wcout << wstr << std::endl; 14 } 15};
こうして作ったdllを以下のC#のプロジェクトから呼び出そうとしています
Csharp
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Sample s = new Sample(); 6 7 s.Print("てすとてすと"); 8 9 } 10 } 11}
これをコンパイルすると以下のエラーが出ますし、Console::Writelineのコメントを外すと例外も発生するので、正常に呼び出されてないように見えます。どういう設定をすればいいのでしょうか
構築されているプロジェクトのプロセッサ アーキテクチャ "MSIL" と、参照 "ManagedDll, Version=0.0.0.0, Culture=neutral, processorArchitecture=AMD64" のプロセッサ アーキテクチャ "x86" の間には不一致がありました。この不一致は、ランタイム エラーを発生させる可能性があります。
[追記]
過去のVSのテンプレート画面です
見ての通り、左側の欄にVisual C++ → CLIという区分が見えます
ほしいのはこれに値するテンプレートになります

回答2件
あなたの回答
tips
プレビュー