掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
引数がマーシャリングした配列のVBのDLLの関数をVBAから呼び出すには? (ID:147945)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
魔界の仮面弁士さん 前回(11月2日)の事前確認の返答を踏まえて回答するつもりでいましたが、返答がまだ頂けないようですので、事前確認の条件で回答します。 > こちらの環境は下記の2パターンです。 > ・Win7 Enterprise x64, VB2010 x86, Excel 2010 x86 > ・Win7 Ultimate x64, VB2010 AnyCPU, Excel 2010 x64 こちらの環境は下記の1パターンです。 ・WindowsXP Professional Version 2002 SP3 Visual Studio 2010 Excel 2003 SP3,VBA:Version 6.5.1054 > そのライブラリを、(VBA ではなく)VB.NET から参照した場合はどうですか? 前回(11月2日)の事前確認の条件であれば、.NETから(COMでなく).NETの呼び出しなので正しく表示されています。 > MsgBox VarType(t_o.x(i)) > MsgBox "[" & t_o.x(i) & "]" > MsgBox TypeName(t_o.x(i)) > とした場合、 > 「8(vbString の意味)」「不定値(1784292など)」「String」 > が返されるのでしょうか? はい。その通りです。 >VBA においては、 > S = "No1" > MsgBos StrPtr(S) '文字列の先頭ポインタ > MsgBox VarPtr(S) '変数のアドレス >のようにすると数値が表示されますが、何か関係があるのかな…。 これらの2つの数値の表示の挙動と比べてみて、数値の桁数が同じなのと、値が毎回変化しているなどの点から、文字列の先頭ポインタが返されているような気がします。 >この時点で何か妙ですね。元の定義を考えると、 >"X() As String" ではなく、 >"x() As String" になりそうなものですが…。 "x() As String"が正しいです。x()の部分が太字で表示されていましたので大文字のように見えましたがコピーペーストして確認しましたら小文字でした。申し訳ありませんでした。 そちらの環境で再現しないということなので、こちらから再現する方法を提示するなどしない限り問題の解決が難しいような気がしていました。また、「構造体で渡すよりもクラスで渡した方が問題が少ない」とも言われていましたので、構造体でなくてもクラスでもよいことをお伝えしたかったのと、クラスでも同様の現象が起きるのかどうかを確認したかったのでクラスでも確認してみましたが、その前に別のエラーが出てしまっていましたので、前回のようなご質問をしたのですが、構造体でなくてもクラスでもできればよいので、前回のご質問(1)の原因を教えていただけないでしょうか。もし私のコードが根本的におかしいのであれば、そちらで正しく動作するコードのサンプルを提示していただけると助かります。 よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.