すみません。C++の初心者です。
C++/CLIフォームアプリケーションで関数の呼出し画面を作成しています。
既にある(C++ネイティブで作成済み)のヘッダファイルをプロジェクト上にコピー、追加して
ヘッダファイル内に書かれている構造体を使用したいのですが、
出来ないのでしょうか?
ヘッダファイル(xxx.h)内には以下のような構造体が作成されています。
typedef struct
{
double pq_base;
int iter_max;
double eps;
int chi_set_flg;
int bad_rmv_flg;
int obs_slk_flg;
int obs_before_flg;
int calc_pf_flg;
double *chi_val_95_0;
double *chi_val_97_5;
double *chi_val_99_0;
}s_SE_SET;
C++/CLIのプロジェクト内にこのヘッダファイルを追加して
フォーム内のあるボタンを押された時に、この構造体を参照させてあげたいのですが、
以下の様に構造体変数を定義して
s_SE_SET se_set;
ビルドを行うと以下のエラーが出ます。
error C4368: 'se_set' をマネージ 'se_project::Form1' のメンバーとして定義できません。
混合型はサポートされていません
C++/CLIではネイティブで定義された構造体は使用出来ないのでしょうか?
なにか方法が有るとすればその方法を教えて頂けると嬉しいです。
どなたかご教授頂けませんでしょうか。
よろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ini_seの第2引数の型はs_SE*じゃないでしょうか。
とすると、seの型は、s_SE*なので、少なくとも第2引数は
ret = ( ??? , se , ??? , ??? , ??? );
ではないでしょうか。
No.2
- 回答日時:
マネージクラスはネイティブクラスのオブジェクトをメンバーにもてません。
ただしポインタはメンバに持てますのでメンバ定義では
s_SE_SET* se_set;
としておき、コンストラクタで
se_set = new s_SE_SET;
ファイナライザで
delete se_set;
のようにすればネイティブのクラスを使うことができます。
ありがとうございます。
お教え通り記述してビルドしてみたところ次の様なエラーが出ました。
error C2664: 'ini_se' : 2 番目の引数を 'cli::interior_ptr<Type>' から 's_SE *' に変換できません。(新しい機能 ; ヘルプを参照)
with
[
Type=s_SE *
]
マネージ型をアンマネージ型に変換できません。
やってみたことは、フォーム名のヘッダファイル(mainfrm.h)内の
ボタンクリックの処理に以下を記載しました。
/********************************/
/* 実行ボタン処理 */
/********************************/
private: System::Void cmd_実行_Click(System::Object^ sender, System::EventArgs^ e) {
/*=============================*/
/* ファイル読込み */
/*=============================*/
ret = SE_OK;
*list_file_name = "file_name.txt";
out_file_name[FILE_NAME_LEN];
//コンストラクタ
se = new s_SE; <--ここを追加
se_set= new s_SE_SET; <--ここを追加
se_out= new s_SE_OUT; <--ここを追加
ret = ini_se( list_file_name, &se, &se_set, &se_out, out_file_name );
また、構造体変数定義は以下です。
private:
/// <summary>
/// 必要なデザイナー変数です。
/// </summary>
System::ComponentModel::Container ^components;
//構造体定義
s_SE* se; <--ここを追加
s_SE_SET* se_set; <--ここを追加
s_SE_OUT* se_out; <--ここを追加
ネイティブのC++で作成したヘッダファイルに記載されている s_SE_SET 等は
何も触っていません。
よろしくお願い致します。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハンドルされていない例外が発...
-
2重定義って??
-
DWORDの実際の型は何でしょうか
-
関数の実体定義にヘッダファイ...
-
visualstudio C# テキストボッ...
-
クラスや構造体のarrayを作りた...
-
構造体の宣言でエラーが出ます。
-
long型の定数の末尾にLを付ける...
-
変数の型を定義しなかった場合...
-
VC6でlong longでエラー?
-
main.c:7:43: warning: implici...
-
分割コンパイル時に構造体....
-
【#define】 defineで定義した...
-
構造体のあるメンバを基準にソ...
-
C++のfor文について
-
CStringを含むconst構造体
-
VB 関数
-
C言語エラーの解決法教えてくだ...
-
[C++]継承したクラスのコンスト...
-
エラー「invalid conversion fr...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
C++の(左辺値)参照を参照渡し
-
main()とint main(void)の違い
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報