teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

前提・質問内容更新

2019/04/09 21:53

投稿

JanTh1989
JanTh1989

スコア87

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,14 @@
1
1
  # 前提
2
2
  C#⇒C++/CLIの流れで動くライブラリ(DLL)作っています。
3
+ ◆C++/CLIで実現したいこと
3
- C++/CLIでは、XMLを読み込んで、自作クラスに値を割り当てて、C#に返す動作を行います
4
+ XMLを読み込んで、自作クラスに値を割り当てて、C#に返す。
5
+ ◆C#で実現したいこと
4
- C#側はC++/CLIから帰ってきたクラスをベースにNewtonsoft.Jsonライブラリにより、Json文字列へ変換⇒JObject型作成を行います。
6
+ C++/CLIから取得したクラスをベースにNewtonsoft.JsonライブラリJson文字列へ変換
7
+ ・作成したJson文字列を同様にNewtonsoft.JsonライブラリでJObject型作成。
5
8
 
9
+ C#であればC++/CLIで実現したいもののクラス構造、処理は算段は立ったのですが、さてC++/CLIで作る、となると知識・経験不足で難航しています。
10
+
6
- ●C#が求めるC++/CLIから返ってくるクラス構造
11
+ ●C++/CLIで作りたいクラス構造(C#版)
7
12
  ```C#
8
13
  // C#で作る場合のクラスイメージです。
9
14
  // C#が呼び出すインタフェースクラス・メソッド
@@ -52,6 +57,14 @@
52
57
  }
53
58
  }
54
59
  ```
60
+ ●C++/CLIのクラス定義
61
+ ```C++
62
+ ref class Analyze;
63
+ class JsonClass;
64
+ class ProfileList;
65
+ class Member;
66
+ class Carrer;
67
+ ```
55
68
  ●作りたいJsonイメージ
56
69
  ```JSON
57
70
  {
@@ -74,18 +87,17 @@
74
87
  }
75
88
  ```
76
89
  ●C#の処理
90
+ 「C#で作る場合のクラスイメージ」の
77
91
  ```C#
78
92
  dynamic jsonClass = XMLAnalyze("ファイルパス");
79
93
  string jsonStr = JsonConvert.SerializeObject(jsonClass);
80
94
  JObject jobject = JObject.Parse(jsonStr);
81
95
  ```
82
- C#からの参照可(public refクラス)はC#イメージクラスのpublicにしているAnalyzeクラスのみで考えています。
83
96
  # 質問内容
97
+ C++/CLIで生成したクラスをC#で受け取って、プロパティのint型にnullが入っているという状態になる方法に難航しています。
84
- C#⇔C++/CLI型変換難航しております。
98
+ C#にはint?ようnull許容型がありますが、C++には無い認識です
85
- マネージドアンマネージドの兼ね合いstd、Systemなど理解が乏しお恥ずかしい限りです・・・
99
+ JSON変換にあたって数値型でもXMLに該当するタグが無ければ「"age":null」ように"null"でも0でもな、nullにいです。
86
- またNull許容型のint型null、stringにnull、についても方法が理解できていせん。
100
+ C++がC#にクラスデータを送り受け取ったクラスのint型プロパティがnull許容となる方法はありすでしょうか?
87
- Null許容型のint型をstring型に変更して、"null"を入れれば?という方法も検討したのですが、最終的にはJObject化して、数値として扱っていく予定のため、あくまで数値かつ「"age":null」のような形でJson文字列化してもらいたいです。
88
- C#クラスイメージのC++版を生成するには、どのような構造になっていればよろしいのでしょうか?
89
101
  # 補足
90
102
  開発環境:VisualStudio2015 Professional
91
103
  .NET:バージョン4.6