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

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

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

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

C#

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

C++

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

504閲覧

C++からC#へCOM経由でポインタを送りたい

taruto_11

総合スコア4

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

C#

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

C++

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/08/20 20:57

編集2019/08/20 20:58

行う目的

C++からCOM経由でWPFを起動して、デバッグ用GUIとして利用しようとしています。
その際に、WPFに変数のポインターを渡して値を管理させようと考えています。
ですが参考サイトが見つからず、C#とCOM関係の知識が浅いのでやり方が分からない状態です。
(初期化等は省略します。)

コード

C++

1 2 3void SetValue(float *value) 4{ 5 6//- 確認用変数 7 HRESULT hr = S_OK; 8 9//+ DISPIDの取得(関数名の設定) 10 DISPID dispid = 0; 11 OLECHAR *Func_Name[] = { L"SetValue" }; 12 hr = CreateWindow_pIDispatch->GetIDsOfNames(IID_NULL, Func_Name, 1, LOCALE_SYSTEM_DEFAULT, &dispid); 13 assert(!FAILED(hr) && "Func_Name{ SetValue } is not found."); 14 15 16 //+ 引数の設定 17 DISPPARAMS parameter; 18 memset(&parameter, 0, sizeof(DISPPARAMS)); 19 parameter.cNamedArgs = 0; 20 parameter.rgdispidNamedArgs = NULL; 21 parameter.cArgs = 1; //! 呼び出す関数の引数の数 22 23 24 //- 引数の情報を設定する変数 25 VARIANTARG* pVarg = new VARIANTARG[parameter.cArgs]; 26 27 //- 確認用変数 28 int index = 0; 29 30 //+ VARIANTARGSの設定 31 pVarg[index].vt = VT_BYREF | VT_R4; 32 pVarg[index].pfltVal = value; 33 34 35 //- 設定した引数分の情報を格納する 36 parameter.rgvarg = pVarg; 37 38 39 //+ 呼び出し 40 hr = CreateWindow_pIDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &parameter, nullptr, NULL, NULL); 41 assert(!FAILED(hr));//エラー 42 43 //- 解放 44 delete[] pVarg; 45 46}

C#

1 2//通らずにエラーになる 3unsafe public void SetValue(float* value)//IntPtrにするべき? 4{ 5 6 Debug.WriteLine( "Number {0}", *value ); 7 *value = 12.0f; 8 Debug.WriteLine( "Number {0}", *value ); 9 10} 11

呼び出しを行ったときのHRESULT

E_NOINTERFACE No such interface supported.

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそものはなしですが、
いくらポインタ値を送ったところで、別プロセス空間になってしまうのでその変数の内容はモニタできません

投稿2019/08/20 21:09

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taruto_11

2019/08/21 00:40

そうだったのですか・・・! 知識不足でした、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問