質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C++/CLI

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

C#

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

C#から、C++クラスメソッドの実行

wave_vague
wave_vague

総合スコア20

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C++/CLI

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

C#

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2回答

0評価

0クリップ

364閲覧

投稿2022/03/08 02:21

編集2022/03/09 11:28

C++のクラスをC#で利用したいため、CLIラッパクラスを作成しています。

c#からc++のメソッドを呼ぶ際、const char*型のメソッドを呼ぶ際に
CS0214 ポインターおよび固定サイズ バッファーは、unsafe コンテキストでのみ使用することができます
とエラーが表示されており呼び出すことができません。
いくつかサイトを検索してみましたが、参考になるページが見つからなかったためご教示お願いいたします。

Test.h

#ifdef DLL_EXPORTS #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif #include <memory> #include <string> #include <vector> #include <cstddef> namespace qrk { class DLL_API Dll { public: const char* name(void) const; private: struct pImpl; std::auto_ptr<pImpl> pimpl; }; }

Test.cpp(cppファイル)

#include "pch.h" #include "Test.h" using namespace qrk; using namespace std; struct Test::pImpl { product_t product_; string name_; pImpl(void) :last_measure_type_(Distance), time_stamp_offset_(0) { urg_t_initialize(&urg_); } }; Test::Test(void) : pimpl(new pImpl) { } Test::~Test(void) { } const char* qrk::Test::name(void) const { if (pimpl->name_.empty()) { pimpl->name_ = product_name(&pimpl->product_); } return pimpl->name_.c_str(); }

WrapperClass.h(ラッパクラスのヘッダファイル)

#include "../Test/Test.h" using namespace System; using namespace System::Runtime::InteropServices; using namespace System::Collections::Generic; namespace Wrapper { public ref class WrapperClass { private: qrk::Test* _test; public: WrapperClass(); ~WrapperClass(); !WrapperClass(); const char* name(void); }; }

WrapperClass.cpp(ラッパクラス)

#include "pch.h" #include "WrapperClass.h" using namespace System; using namespace System::Runtime::InteropServices; Wrapper::WrapperClass::WrapperClass() { _test = new qrk::Test(); } Wrapper::WrapperClass::~WrapperClass() { delete _test; _test = nullptr; } Wrapper::WrapperClass::!WrapperClass() { this->~WrapperClass(); } const char* Wrapper::WrapperClass::name(void) { return _test->name(); }

Sample.cs(C#のクラス)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; using Wrapper; namespace SampleTest { public class Sample { //WrapperClassのインスタンスを作成 WrapperClass wr = new WrapperClass(); public bool getSensorParameter() { if (wr.name() == "") //CS0214 ポインターおよび固定サイズ バッファーは、unsafe コンテキストでのみ使用することができます { return false; } return true; } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

C++/CLI

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

C#

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

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。