質問編集履歴

4

書式の改善

2022/01/20 08:00

投稿

Soogle44
Soogle44

スコア8

test CHANGED
@@ -1 +1 @@
1
- C#からC++の関数をクラスライブラリ経由で利用する際、C++std::stringを使えない(アンマネージドな変数をつかえない)
1
+ C#からC++の関数をクラスライブラリ経由で利用するでない
test CHANGED
@@ -55,29 +55,3 @@
55
55
  return image;
56
56
  }
57
57
  ```
58
-
59
- ### 補足情報(FW/ツールのバージョンなど)
60
- visual studio express 2017
61
- OpenCvSharp 4.5.5
62
- opencv 4.5.5
63
-
64
- ---------------------
65
- 追記
66
-
67
- 可読性の関係でc++/cliのクラスライブラリを用いてc++の関数をc#から使うように変更しました。
68
- その際、c++の中にstringがあるとうまくいかず困っています。
69
- (c#とc++で文字列を受け渡しはしておらずc++の関数内でローカルのファイルを読み込む処理を含む関数を想定しています。)
70
-
71
- [リンク](https://qiita.com/miwazawa/items/835225e9e1ea15eabdde)を参考にc#からのbitmapを引数にmatに変換する関数、matからbitmapに変換する関数の作成はできました。
72
- 次にローカルのファイルをファイルを読み込んでimshowさせるような関数を作成しているのですが、以下のようにstringの変数を使用するところでハンドルされない例外が出てしまいます。
73
-
74
- ```c++
75
- void OpenCVLibrary::ProcMat::test() {
76
- std::string file = "dog.jpg";
77
- cv::Mat img = imread(file);
78
- cv::imshow("test", img); //ここで'System.Runtime.InteropServices.SEHException: '外部コンポーネントが例外をスローしました。'となります
79
- cv::waitKey(0);
80
- }
81
- ```
82
- この時の変数を見るとアンマネージドだからマネージドにかけばいいというのはわかるのですがSystem::String^などはimshowの引数にできなかったりとどうしてよいのかわかりません。
83
- なにか案などはありますでしょうか??

3

タイトルの変更

2022/01/20 02:26

投稿

Soogle44
Soogle44

スコア8

test CHANGED
@@ -1 +1 @@
1
- C#からC++の関数をクラスライブラリ利用して利用する際、C++でstd::stringを使えない(アンマネージドな変数をつかえない)
1
+ C#からC++の関数をクラスライブラリ経由で利用する際、C++でstd::stringを使えない(アンマネージドな変数をつかえない)
test CHANGED
File without changes

2

タイトルの変更

2022/01/20 02:25

投稿

Soogle44
Soogle44

スコア8

test CHANGED
@@ -1 +1 @@
1
- C#からC++の関数を使う際にopencvのMat型の変数受け渡しできない(System.IvalidOperationException)
1
+ C#からC++の関数をクラスライブラリ利用て利用する際、C++でstd::stringを使えない(アンマネージドな変数をつかえない)
test CHANGED
File without changes

1

クラスライブラリの利用に変更することで画像の受け渡しはできましたが、文字列の扱いで困っています。

2022/01/20 00:53

投稿

Soogle44
Soogle44

スコア8

test CHANGED
File without changes
test CHANGED
@@ -61,3 +61,23 @@
61
61
  OpenCvSharp 4.5.5
62
62
  opencv 4.5.5
63
63
 
64
+ ---------------------
65
+ 追記
66
+
67
+ 可読性の関係でc++/cliのクラスライブラリを用いてc++の関数をc#から使うように変更しました。
68
+ その際、c++の中にstringがあるとうまくいかず困っています。
69
+ (c#とc++で文字列を受け渡しはしておらずc++の関数内でローカルのファイルを読み込む処理を含む関数を想定しています。)
70
+
71
+ [リンク](https://qiita.com/miwazawa/items/835225e9e1ea15eabdde)を参考にc#からのbitmapを引数にmatに変換する関数、matからbitmapに変換する関数の作成はできました。
72
+ 次にローカルのファイルをファイルを読み込んでimshowさせるような関数を作成しているのですが、以下のようにstringの変数を使用するところでハンドルされない例外が出てしまいます。
73
+
74
+ ```c++
75
+ void OpenCVLibrary::ProcMat::test() {
76
+ std::string file = "dog.jpg";
77
+ cv::Mat img = imread(file);
78
+ cv::imshow("test", img); //ここで'System.Runtime.InteropServices.SEHException: '外部コンポーネントが例外をスローしました。'となります
79
+ cv::waitKey(0);
80
+ }
81
+ ```
82
+ この時の変数を見るとアンマネージドだからマネージドにかけばいいというのはわかるのですがSystem::String^などはimshowの引数にできなかったりとどうしてよいのかわかりません。
83
+ なにか案などはありますでしょうか??