検索結果 6 件
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: VB2010からVCが受け取る配列のアドレスについて
- 返信数: 6
- 閲覧数: 4401
Re: VB2010からVCが受け取る配列のアドレスについて
閉じた予定だったのですが、その後、質問しなおす前に解決しました。 VS2015で一から簡単なOCXをサンプルで作って確認したところ、重要なヒントが表示され、解決しました。 void Searchs(VARIANT FAR* lX) { VARIANT *va; if ((*lX).vt == (VT_VARIANT | VT_BYREF)) { va = (*lX).pvarVal; } else { va = &(*lX); } SAFEARRAY *psa; if (va->vt & VT_BYREF) { psa = *va->pparray; } else { psa = va->pa...
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: VB2010からVCが受け取る配列のアドレスについて
- 返信数: 6
- 閲覧数: 4401
Re: VB2010からVCが受け取る配列のアドレスについて
最初の質問時より、かなり認識が変わってきて、回答もなかなか付かないようなので、改めて書き直して別途質問しようと思います。
こちらはひとまず閉じます。
こちらはひとまず閉じます。
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: VB2010からVCが受け取る配列のアドレスについて
- 返信数: 6
- 閲覧数: 4401
Re: VB2010からVCが受け取る配列のアドレスについて
あれやこれやと悩んで3週間、やっとOCX側でVB2010の配列の値を受け取ることができました。 ディスパッチマップの該当引数をVTS_VARIANTとし、VB2010からは、lX[0]ではなくlXを渡すようにします。 受け側のOCXでは、 Searchs([in] VARIANT lX)で定義し、メソッドは、 Searchs(VARIANT *lX)としました。 すると、lXの配列の値がOCX側で受け取ることができました。 ただ、この方法では、OCX側からVB2010側の配列に値を設定することができません。 Searchs([in,out] VARIANT* lX)で定義すればいけるかなと思い...
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: VB2010からVCが受け取る配列のアドレスについて
- 返信数: 6
- 閲覧数: 4401
Re: VB2010からVCが受け取る配列のアドレスについて
https://support.microsoft.com/ja-jp/kb/207931
上記の内容が今回の疑問点を解消してくれそうなので、示しておきます。
上記の内容が今回の疑問点を解消してくれそうなので、示しておきます。
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: VB2010からVCが受け取る配列のアドレスについて
- 返信数: 6
- 閲覧数: 4401
Re: VB2010からVCが受け取る配列のアドレスについて
sizeof(SAFEARRAY)で調べたところ、確かに24バイトであると認識できました。
理由はこれなのかもしれません。
その後の調査により、マーシャリングするなどが必要なようですね。配列をやり取りする箇所については、以前の方法とは別の方法が必要であると認識できたので、この箇所を修正する方向で考えたいと思います。
ありがとうございました。
理由はこれなのかもしれません。
その後の調査により、マーシャリングするなどが必要なようですね。配列をやり取りする箇所については、以前の方法とは別の方法が必要であると認識できたので、この箇所を修正する方向で考えたいと思います。
ありがとうございました。
- 9年前
- フォーラム: C言語何でも質問掲示板
- トピック: VB2010からVCが受け取る配列のアドレスについて
- 返信数: 6
- 閲覧数: 4401
VB2010からVCが受け取る配列のアドレスについて
初めまして、よろしくお願いします。 VC++6で作成されたOCXをVC2010用に修正して、そのOCXをVB2010で使用しています。 その際、配列の最初の要素のアドレスを受け取っているのですが、その次の要素のアドレスをどのように取得すればよいのか、わかりません。 VC++6では、以下のように処理していました。 // lXとlYに、配列要素の先頭アドレスが渡ってきます。 // lX[0] = 1000、lX[1] = 2000、lY[0] = 1500、lY[1] = 2500のようにVB側でしている場合、 // Searchs( lx(0), ly(0) ) のようにして呼び出しています。 ...