質問編集履歴

10

要約

2025/05/27 16:27

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -89,17 +89,20 @@
89
89
  } ;
90
90
  ```
91
91
 
92
- ```C++ベースのメソッドの抜粋
92
+ ```C++のメソッドの抜粋
93
- if ( ( pvarData->vt & VT_BSTR ) &&
93
+ if ( ( pvarData->vt & VT_BSTR ) && ( pvarData->vt & VT_BYREF ) ) {
94
- ( pvarData->vt & VT_BYREF ) ) {
95
- *(pvarData->pbstrVal) = Copy();
94
+ *(pvarData->pbstrVal) = Copy();
96
- }
95
+ }
97
96
 
98
97
  ※VT_BSTR=8、VT_BYREF=16384
99
98
  ```
100
99
 
101
100
  ```C#、VisualStudioでカーソルを当てたときに表示されるポップアップから飛んだC++のメソッドの定義
102
- bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Foo, [In][MarshalAs(UnmanagedType.BStr)] string Bar = "", [In][MarshalAs(UnmanagedType.BStr)] string Baz = "", [In] int FooBar = 0, [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
101
+ bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Foo,
102
+ [In][MarshalAs(UnmanagedType.BStr)] string Bar = "",
103
+ [In][MarshalAs(UnmanagedType.BStr)] string Baz = "",
104
+ [In] int FooBar = 0,
105
+ [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
103
106
  ```
104
107
 
105
108
  ```C#、現在のコードの抜粋

9

要約

2025/05/27 16:19

投稿

userName
userName

スコア5

test CHANGED
@@ -1 +1 @@
1
- C# C++呼出(COM) VARIANT型出力引数の取得
1
+ C# C++呼出 VARIANT型出力引数の取得
test CHANGED
@@ -1,17 +1,18 @@
1
1
  ### 実現したいこと
2
- COMとして登録したC++のメソッドを呼び出しているのでが、VARIANT型の出力引数を取得したいです
2
+ C#から、COM登録したC++のメソッドを呼び出していす。
3
+ VARIANT型の出力引数を取得したいです。
3
4
 
4
- ### 発生している問題・分からないこと
5
+ ### 発生している問題
5
- VARIANT型を模倣した構造体を引数として与えていますが、出力が代入されることを期待しているプロパティがメソッドの呼び出し前後で変化していません。
6
+ VARIANT型をレイアウトした構造体を引数としていますが、メソッドの呼び出し前後で出力引数が変化していません。
6
7
 
7
8
  ### 該当のソースコード
8
9
 
9
- ```C++ベースのメソッドの定義
10
+ ```C++のメソッドの定義
10
11
  bool FooClass::GetField(
12
+ _bstr_t foo,
11
- _bstr_t bstrKey,
13
+ _bstr_t bar,
12
- _bstr_t bstrDestinationNetworkName,
13
- _bstr_t bstrFieldName,
14
+ _bstr_t baz,
14
- short shFieldNo,
15
+ short foobar,
15
16
  VARIANT *pvarData
16
17
  )
17
18
  ```
@@ -89,30 +90,23 @@
89
90
  ```
90
91
 
91
92
  ```C++ベースのメソッドの抜粋
92
- case 5: // char型 //
93
- // ----------- ■ 文字列(char)型の場合
94
93
  if ( ( pvarData->vt & VT_BSTR ) &&
95
94
  ( pvarData->vt & VT_BYREF ) ) {
96
- *(pvarData->pbstrVal) = bstrData.copy();
95
+ *(pvarData->pbstrVal) = Copy();
97
96
  }
98
- break;
99
-
100
- default:
101
- m_cscSDBService.Unlock(); // ロック解除(SDBMSデータサービスクラス用)
102
- return false; // 異常終了
103
97
 
104
98
  ※VT_BSTR=8、VT_BYREF=16384
105
99
  ```
106
100
 
107
- ```C#、VisualStudioでカーソルを当てたときに表示されるポップアップから飛んだC++のメソッドの定義
108
- bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Key, [In][MarshalAs(UnmanagedType.BStr)] string NetworkName = "", [In][MarshalAs(UnmanagedType.BStr)] string FieldName = "", [In] int FieldNo = 0, [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
101
+ ```C#、VisualStudioでカーソルを当てたときに表示されるポップアップから飛んだC++のメソッドの定義
102
+ bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Foo, [In][MarshalAs(UnmanagedType.BStr)] string Bar = "", [In][MarshalAs(UnmanagedType.BStr)] string Baz = "", [In] int FooBar = 0, [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
109
103
  ```
110
104
 
111
105
  ```C#、現在のコードの抜粋
112
- var data1 = new VARIANT { vt = (ushort)(VarEnum.VT_BSTR | VarEnum.VT_BYREF) };
106
+ var data = new VARIANT { vt = (ushort)(VarEnum.VT_BSTR | VarEnum.VT_BYREF) };
113
- var pData1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(data1));
107
+ var pData = Marshal.AllocCoTaskMem(Marshal.SizeOf(data));
114
- Marshal.StructureToPtr(data1, pData1, true);
108
+ Marshal.StructureToPtr(data, pData, true);
115
- var result1 = _netMSDBService.GetField(key, networkName, "TAG", 0, pData1);
109
+ var result = foo.GetField(foo, bar, baz, 0, pData);
116
110
 
117
111
  [StructLayout(LayoutKind.Sequential, Pack = 8)]
118
112
  private struct VARIANT
@@ -122,17 +116,13 @@
122
116
  }
123
117
  ```
124
118
 
125
- ### 試したこと・調べたこと
119
+ ### 調べたこと
126
- ①当該メソッドを通っているかを確認しました。
127
- 別の引数によりswitch文のルートが決まります(C++メソッドの抜粋を参照)。期待している値の場合は戻り値としてtrue、期待していない値の場合は戻り値としてfalseが返るようになっており、true/falseが切り替わることは確認済みです。
128
- 現在のC#コードの場合は、case 5を通ることも問題ありません。
129
- ②デバッガでメソッドの呼び出し前後の構造体の中身を確認しました。
120
+ メソッドの呼び出し前後の構造体を確認しました。
130
- 初期化後:pVal=0x00000000、vt=16392
121
+  初期化後:pVal=0x00000000、vt=16392
131
- メソッドの呼び出し後:pVal=0x00000000、vt=16392
122
+  メソッドの呼び出し後:pVal=0x00000000、vt=16392
132
- pData1にも逐次適当な値が設定されています(例えば、0x0b1fd248)。
123
+  pDataにも適当な値が設定されています(例えば、0x0b1fd248)。
133
124
 
134
125
  ### 補足
135
126
  VisualStudio2022、.NET8.0、C#12.0を使用しています。
136
- そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないのですが、現在のC#コードには問題はないのか、何か勘違いをしていないか等を知り、少しでも原因を絞りたい次第です。
137
127
  何か気づいたことがあれば、ご教授いただけると助かります。
138
128
  よろしくお願いいたします。

8

要点の簡潔化

2025/05/27 15:43

投稿

userName
userName

スコア5

test CHANGED
@@ -1 +1 @@
1
- C# C++DLLメソッド呼出(COMコンポーネント) VARIANT型出力引数の取得
1
+ C# C++呼出(COM) VARIANT型出力引数の取得
test CHANGED
@@ -1,24 +1,22 @@
1
1
  ### 実現したいこと
2
- あるアプリケーションをVB6ベースからC#ベースへ移行しています。
3
- その中で、COMコンポーネントとして登録したC++ベースDLLのメソッドを呼び出しているのですが、そのメソッドのVARIANT型の出力引数を取得したいです。
2
+ COMとして登録したC++のメソッドを呼び出しているのですが、VARIANT型の出力引数を取得したいです。
4
3
 
5
4
  ### 発生している問題・分からないこと
6
- VARIANT型の出力引数を取得できていません。
7
5
  VARIANT型を模倣した構造体を引数として与えていますが、出力が代入されることを期待しているプロパティがメソッドの呼び出し前後で変化していません。
8
6
 
9
7
  ### 該当のソースコード
10
8
 
11
9
  ```C++ベースのメソッドの定義
12
- bool SDBServiceClass::GetField(
10
+ bool FooClass::GetField(
13
- _bstr_t bstrKey, // In : key
11
+ _bstr_t bstrKey,
14
- _bstr_t bstrDestinationNetworkName, // In : 要求先ネットワーク名
12
+ _bstr_t bstrDestinationNetworkName,
15
- _bstr_t bstrFieldName, // In : フィールド名
13
+ _bstr_t bstrFieldName,
16
- short shFieldNo, // In : フィールド番号
14
+ short shFieldNo,
17
- VARIANT *pvarData // Out : データ
15
+ VARIANT *pvarData
18
16
  )
19
17
  ```
20
18
 
21
- ```C++ベースのVARIANT型の定義
19
+ ```C++のVARIANT型の定義
22
20
  typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;
23
21
 
24
22
  struct tagVARIANT
@@ -106,7 +104,7 @@
106
104
  ※VT_BSTR=8、VT_BYREF=16384
107
105
  ```
108
106
 
109
- ```C#、VisualStudio上でカーソルを当てたときに表示されるポップアップから飛んだC++ベースDLLのメソッドの定義
107
+ ```C#、VisualStudio上でカーソルを当てたときに表示されるポップアップから飛んだC++のメソッドの定義
110
108
  bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Key, [In][MarshalAs(UnmanagedType.BStr)] string NetworkName = "", [In][MarshalAs(UnmanagedType.BStr)] string FieldName = "", [In] int FieldNo = 0, [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
111
109
  ```
112
110
 
@@ -134,8 +132,7 @@
134
132
  pData1にも逐次適当な値が設定されています(例えば、0x0b1fd248)。
135
133
 
136
134
  ### 補足
137
- VisualStudio2022、.Net8.0、C#12.0を使用しています。
135
+ VisualStudio2022、.NET8.0、C#12.0を使用しています。
138
- C++内部の状態を確認するための仕込みをし再コンパイルしようと思いましたが、optional parameters must come after required parameters等、多くのエラーが発生している状態です。
139
136
  そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないのですが、現在のC#コードには問題はないのか、何か勘違いをしていないか等を知り、少しでも原因を絞りたい次第です。
140
- 何か気づいたことがあれば、ご教授いただけると助かります。些細なことでも構いません。
137
+ 何か気づいたことがあれば、ご教授いただけると助かります。
141
138
  よろしくお願いいたします。

7

言い回しの修正

2024/09/12 11:13

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -4,11 +4,11 @@
4
4
 
5
5
  ### 発生している問題・分からないこと
6
6
  VARIANT型の出力引数を取得できていません。
7
- VARIANT型を模倣した構造体を引数として与えていますが、出力として代入されることを期待しているプロパティがメソッドの呼び出し前後で変化していません。
7
+ VARIANT型を模倣した構造体を引数として与えていますが、出力代入されることを期待しているプロパティがメソッドの呼び出し前後で変化していません。
8
8
 
9
9
  ### 該当のソースコード
10
10
 
11
- ```C++メソッドの定義
11
+ ```C++ベースのメソッドの定義
12
12
  bool SDBServiceClass::GetField(
13
13
  _bstr_t bstrKey, // In : key
14
14
  _bstr_t bstrDestinationNetworkName, // In : 要求先ネットワーク名
@@ -18,7 +18,7 @@
18
18
  )
19
19
  ```
20
20
 
21
- ```VARIANT型の定義
21
+ ```C++ベースのVARIANT型の定義
22
22
  typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;
23
23
 
24
24
  struct tagVARIANT
@@ -90,7 +90,7 @@
90
90
  } ;
91
91
  ```
92
92
 
93
- ```C++メソッドの抜粋
93
+ ```C++ベースのメソッドの抜粋
94
94
  case 5: // char型 //
95
95
  // ----------- ■ 文字列(char)型の場合
96
96
  if ( ( pvarData->vt & VT_BSTR ) &&
@@ -106,11 +106,11 @@
106
106
  ※VT_BSTR=8、VT_BYREF=16384
107
107
  ```
108
108
 
109
- ```VisualStudioでカーソルを当てたときに表示されるポップアップから飛んだメソッドの定義
109
+ ```C#、VisualStudioでカーソルを当てたときに表示されるポップアップから飛んだC++ベースのDLLのメソッドの定義
110
110
  bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Key, [In][MarshalAs(UnmanagedType.BStr)] string NetworkName = "", [In][MarshalAs(UnmanagedType.BStr)] string FieldName = "", [In] int FieldNo = 0, [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
111
111
  ```
112
112
 
113
- ```現在のC#コードの抜粋
113
+ ```C#、現在のコードの抜粋
114
114
  var data1 = new VARIANT { vt = (ushort)(VarEnum.VT_BSTR | VarEnum.VT_BYREF) };
115
115
  var pData1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(data1));
116
116
  Marshal.StructureToPtr(data1, pData1, true);

6

言い回しの修正

2024/09/12 09:39

投稿

userName
userName

スコア5

test CHANGED
@@ -1 +1 @@
1
- C# C++dllメソッド呼出(COMコンポーネント) VARIANT型出力引数の取得
1
+ C# C++DLLメソッド呼出(COMコンポーネント) VARIANT型出力引数の取得
test CHANGED
@@ -1,10 +1,10 @@
1
1
  ### 実現したいこと
2
2
  あるアプリケーションをVB6ベースからC#ベースへ移行しています。
3
- その中で、COMコンポーネントとして登録したC++ベースのdllのメソッドを呼び出していすが、そのメソッドのVARIANT型の出力引数を取得したいです。
3
+ その中で、COMコンポーネントとして登録したC++ベースのDLLのメソッドを呼び出しているのですが、そのメソッドのVARIANT型の出力引数を取得したいです。
4
4
 
5
5
  ### 発生している問題・分からないこと
6
6
  VARIANT型の出力引数を取得できていません。
7
- 新たに定義した構造体を引数として与えていますが、出力が格納されることを期待しているプロパティがメソッドの呼び出し前後で変化していません。
7
+ VARIANT型を模倣した構造体を引数として与えていますが、出力として代入されることを期待しているプロパティがメソッドの呼び出し前後で変化していません。
8
8
 
9
9
  ### 該当のソースコード
10
10
 

5

pData1にも逐次適当な値が設定されています(例えば、0x0b1fd248)。

2024/09/10 11:18

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -111,17 +111,17 @@
111
111
  ```
112
112
 
113
113
  ```現在のC#コードの抜粋
114
+ var data1 = new VARIANT { vt = (ushort)(VarEnum.VT_BSTR | VarEnum.VT_BYREF) };
115
+ var pData1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(data1));
116
+ Marshal.StructureToPtr(data1, pData1, true);
117
+ var result1 = _netMSDBService.GetField(key, networkName, "TAG", 0, pData1);
118
+
114
119
  [StructLayout(LayoutKind.Sequential, Pack = 8)]
115
120
  private struct VARIANT
116
121
  {
117
122
  public ushort vt;
118
123
  public IntPtr pVal;
119
124
  }
120
-
121
- var data1 = new VARIANT { vt = (ushort)(VarEnum.VT_BSTR | VarEnum.VT_BYREF) };
122
- var pData1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(data1));
123
- Marshal.StructureToPtr(data1, pData1, true);
124
- var result1 = _netMSDBService.GetField(key, networkName, "TAG", 0, pData1);
125
125
  ```
126
126
 
127
127
  ### 試したこと・調べたこと
@@ -131,10 +131,11 @@
131
131
  ②デバッガでメソッドの呼び出し前後の構造体の中身を確認しました。
132
132
  初期化後:pVal=0x00000000、vt=16392
133
133
  メソッドの呼び出し後:pVal=0x00000000、vt=16392
134
+ pData1にも逐次適当な値が設定されています(例えば、0x0b1fd248)。
134
135
 
135
136
  ### 補足
136
137
  VisualStudio2022、.Net8.0、C#12.0を使用しています。
137
138
  C++内部の状態を確認するための仕込みをし再コンパイルしようと思いましたが、optional parameters must come after required parameters等、多くのエラーが発生している状態です。
138
- そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないですが、現在のC#コードには問題はないのか、何か勘違いをしていないか等を知り、原因を絞りたい次第です。
139
+ そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないですが、現在のC#コードには問題はないのか、何か勘違いをしていないか等を知り、少しでも原因を絞りたい次第です。
139
140
  何か気づいたことがあれば、ご教授いただけると助かります。些細なことでも構いません。
140
141
  よろしくお願いいたします。

4

言い回し修正

2024/09/10 08:16

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -126,14 +126,15 @@
126
126
 
127
127
  ### 試したこと・調べたこと
128
128
  ①当該メソッドを通っているかを確認しました。
129
- 別の引数によりswitch文のルートが決まります(C++メソッドの抜粋を参照)。期待している値の場合は戻り値としてtrue、期待していない値の場合は戻り値としてfalseが返るようになっており、true/falseが切り替わることは確認済みです。現在のC#コードの場合は、case 5を通ることも問題ありません。
129
+ 別の引数によりswitch文のルートが決まります(C++メソッドの抜粋を参照)。期待している値の場合は戻り値としてtrue、期待していない値の場合は戻り値としてfalseが返るようになっており、true/falseが切り替わることは確認済みです。
130
+ 現在のC#コードの場合は、case 5を通ることも問題ありません。
130
131
  ②デバッガでメソッドの呼び出し前後の構造体の中身を確認しました。
131
132
  初期化後:pVal=0x00000000、vt=16392
132
133
  メソッドの呼び出し後:pVal=0x00000000、vt=16392
133
134
 
134
135
  ### 補足
135
136
  VisualStudio2022、.Net8.0、C#12.0を使用しています。
136
- C++内の状態を確認するための仕込みをし再コンパイルしようと思いましたが、optional parameters must come after required parameters等、多くのエラーが発生している状態です。
137
+ C++内の状態を確認するための仕込みをし再コンパイルしようと思いましたが、optional parameters must come after required parameters等、多くのエラーが発生している状態です。
137
- そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないですが、現在のC#コードには誤りがないのか、何か勘違いをしていないか等を知り、原因を絞りたい次第です。
138
+ そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないですが、現在のC#コードには問題はないのか、何か勘違いをしていないか等を知り、原因を絞りたい次第です。
138
139
  何か気づいたことがあれば、ご教授いただけると助かります。些細なことでも構いません。
139
140
  よろしくお願いいたします。

3

VARIANT型の追記

2024/09/10 08:10

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### 発生している問題・分からないこと
6
6
  VARIANT型の出力引数を取得できていません。
7
- 新たに定義した構造体を引数として与えていますが、出力が格納されると期待しているプロパティがメソッドの呼び出し前後で変化していません。
7
+ 新たに定義した構造体を引数として与えていますが、出力が格納される期待しているプロパティがメソッドの呼び出し前後で変化していません。
8
8
 
9
9
  ### 該当のソースコード
10
10
 
@@ -16,6 +16,78 @@
16
16
  short shFieldNo, // In : フィールド番号
17
17
  VARIANT *pvarData // Out : データ
18
18
  )
19
+ ```
20
+
21
+ ```VARIANT型の定義
22
+ typedef /* [wire_marshal] */ struct tagVARIANT VARIANT;
23
+
24
+ struct tagVARIANT
25
+ {
26
+ union
27
+ {
28
+ struct __tagVARIANT
29
+ {
30
+ VARTYPE vt;
31
+ WORD wReserved1;
32
+ WORD wReserved2;
33
+ WORD wReserved3;
34
+ union
35
+ {
36
+ LONGLONG llVal;
37
+ LONG lVal;
38
+ BYTE bVal;
39
+ SHORT iVal;
40
+ FLOAT fltVal;
41
+ DOUBLE dblVal;
42
+ VARIANT_BOOL boolVal;
43
+ _VARIANT_BOOL bool;
44
+ SCODE scode;
45
+ CY cyVal;
46
+ DATE date;
47
+ BSTR bstrVal;
48
+ IUnknown *punkVal;
49
+ IDispatch *pdispVal;
50
+ SAFEARRAY *parray;
51
+ BYTE *pbVal;
52
+ SHORT *piVal;
53
+ LONG *plVal;
54
+ LONGLONG *pllVal;
55
+ FLOAT *pfltVal;
56
+ DOUBLE *pdblVal;
57
+ VARIANT_BOOL *pboolVal;
58
+ _VARIANT_BOOL *pbool;
59
+ SCODE *pscode;
60
+ CY *pcyVal;
61
+ DATE *pdate;
62
+ BSTR *pbstrVal;
63
+ IUnknown **ppunkVal;
64
+ IDispatch **ppdispVal;
65
+ SAFEARRAY **pparray;
66
+ VARIANT *pvarVal;
67
+ PVOID byref;
68
+ CHAR cVal;
69
+ USHORT uiVal;
70
+ ULONG ulVal;
71
+ ULONGLONG ullVal;
72
+ INT intVal;
73
+ UINT uintVal;
74
+ DECIMAL *pdecVal;
75
+ CHAR *pcVal;
76
+ USHORT *puiVal;
77
+ ULONG *pulVal;
78
+ ULONGLONG *pullVal;
79
+ INT *pintVal;
80
+ UINT *puintVal;
81
+ struct __tagBRECORD
82
+ {
83
+ PVOID pvRecord;
84
+ IRecordInfo *pRecInfo;
85
+ } __VARIANT_NAME_4;
86
+ } __VARIANT_NAME_3;
87
+ } __VARIANT_NAME_2;
88
+ DECIMAL decVal;
89
+ } __VARIANT_NAME_1;
90
+ } ;
19
91
  ```
20
92
 
21
93
  ```C++メソッドの抜粋
@@ -31,10 +103,10 @@
31
103
  m_cscSDBService.Unlock(); // ロック解除(SDBMSデータサービスクラス用)
32
104
  return false; // 異常終了
33
105
 
34
- ※VT_BSTR=8、VT_BYREF=16384です。
106
+ ※VT_BSTR=8、VT_BYREF=16384
35
107
  ```
36
108
 
37
- ```VisualStudioで当該メソッドにカーソルを当てたときに表示されるポップアップから飛んだメソッドの定義
109
+ ```VisualStudioでカーソルを当てたときに表示されるポップアップから飛んだメソッドの定義
38
110
  bool GetField([In][MarshalAs(UnmanagedType.BStr)] string Key, [In][MarshalAs(UnmanagedType.BStr)] string NetworkName = "", [In][MarshalAs(UnmanagedType.BStr)] string FieldName = "", [In] int FieldNo = 0, [In][Out][MarshalAs(UnmanagedType.Struct)] ref object pData);
39
111
  ```
40
112
 
@@ -53,12 +125,6 @@
53
125
  ```
54
126
 
55
127
  ### 試したこと・調べたこと
56
- - [x] teratailやGoogle等で検索した
57
- - [x] ソースコードを自分なりに変更した
58
- - [x] 知人に聞いた
59
- - [ ] その他
60
-
61
- ##### 上記の詳細・結果
62
128
  ①当該メソッドを通っているかを確認しました。
63
129
  別の引数によりswitch文のルートが決まります(C++メソッドの抜粋を参照)。期待している値の場合は戻り値としてtrue、期待していない値の場合は戻り値としてfalseが返るようになっており、true/falseが切り替わることは確認済みです。現在のC#コードの場合は、case 5を通ることも問題ありません。
64
130
  ②デバッガでメソッドの呼び出し前後の構造体の中身を確認しました。

2

冗長箇所の削除

2024/09/10 08:03

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -5,12 +5,6 @@
5
5
  ### 発生している問題・分からないこと
6
6
  VARIANT型の出力引数を取得できていません。
7
7
  新たに定義した構造体を引数として与えていますが、出力が格納されると期待しているプロパティがメソッドの呼び出し前後で変化していません。
8
-
9
-
10
- ### エラーメッセージ
11
- ```error
12
- エラーメッセージは発生していません。
13
- ```
14
8
 
15
9
  ### 該当のソースコード
16
10
 

1

開発環境の追記

2024/09/10 08:01

投稿

userName
userName

スコア5

test CHANGED
File without changes
test CHANGED
@@ -72,6 +72,7 @@
72
72
  メソッドの呼び出し後:pVal=0x00000000、vt=16392
73
73
 
74
74
  ### 補足
75
+ VisualStudio2022、.Net8.0、C#12.0を使用しています。
75
76
  C++内の状態を確認するための仕込みをして再コンパイルしようと思いましたが、optional parameters must come after required parameters等、多くのエラーが発生している状態です。
76
77
  そもそも、代入する値(bstrData(C++メソッドの抜粋を参照))が正しく設定されていない可能性も否めないですが、現在のC#コードには誤りがないのか、何か勘違いをしていないか等を知り、原因を絞りたい次第です。
77
78
  何か気づいたことがあれば、ご教授いただけると助かります。些細なことでも構いません。