■65676 |
Re[2]: VBAからC#にSendMessageしてもキャッチ出来ない |
□投稿者/ doragora -(2013/03/14(Thu) 03:31:39)
| ■No65670 (Azulean さん) に返信 > 世の中によくあるサンプルでは COPYDATASTRUCT 構造体は As Any にしているパターンが多くあります。 > あえて、VarPtr 路線を選んだ理由はあるのでしょうか? > > 一例:http://support.microsoft.com/kb/176058
質問する前には色々試していて、もちろんAs Anyも試しています。 ByRefにするのがちょっと気持ち悪いとかその程度の事です。 AではなくWを使用しているのも同様です。 ※ただExcel内部ではUnicodeなのに、APIではAnsiに(自動的に)されると条件の切り分けがしにくいと感じたこともあります。
KB拝見しました。詳細の警告部分はちょっと考えさせられましたが、サンプルでもVarPtr使っている。 >cds.cbData = Len(a$) + 1 +1する理由はnull終端分でしょうけど、CopyMemoryしたのはLen(a$)分なのですよね。 1バイト分はどうなってるんだ?って疑問に思うサンプルだと思います。
ターゲットサンプルで >a$ = Left$(a$, InStr(1, a$, Chr$(0)) - 1) してるので、なんとなく正常に動作すると思いますけど、+1した分は初期化されてないので、Chr$(0)で保証出来るのか疑問
> ところで、C# アプリは x86? x64?
現状C#アプリはAny CPUです。が、本番では同時に読み込むライブラリがx86であることが解っているので、最終的にはx86になります。 これは気にしてなかったので、試してみます。
■No65675 (通りすがり さん) に返信 最終目標である構造体よりシンプルである文字列にしましたが、確かに数値の方が型が決まっていればシンプルですね。 LongとUInt32、C/C++、スパイも試してみます。
|
|