質問編集履歴

2 テンプレートの説明の追加

izmktr

izmktr score 2740

2019/05/16 01:23  投稿

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

    12536 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C++/CLI

    27 questions

    C++/CLIは、.NET Frameworkの共通言語基盤であるCLI向けにC++を拡張したプログラム言語です。前身のC++マネージ拡張と比較するとシンプルで分かりやすい構文になっており、高い可読性を持ちます。

1 説明の追加

izmktr

izmktr score 2740

2019/05/13 14:38  投稿

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

    12536 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • C++/CLI

    27 questions

    C++/CLIは、.NET Frameworkの共通言語基盤であるCLI向けにC++を拡張したプログラム言語です。前身のC++マネージ拡張と比較するとシンプルで分かりやすい構文になっており、高い可読性を持ちます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る