掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
エクセルセル範囲を代入したVariant型変数をC/C++で作るDLLに渡すには? (ID:70069)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Blue様 >codeprojectのはRangeオブジェクトで渡しているわけではないです。 何故あの例を載せてあるのか疑問ですが、サンプルのVBAコードはご指摘の通りです。 下記の様なVBAのコードで試験しましたが、いずれも動作しました。 Sub checkArrayTest() Dim rng As Range Dim rngArray As Variant Set rng = Range("b3:f7") Range("h3:l7") = SumOneToArray(rng) '9 VT_DISPATCH rngArray = rng Range("h3:l7") = SumOneToArray(rngArray) '8204 VT_ARRAY | VT_VARIANT rngArray = rng.Value Range("h3:l7") = SumOneToArray(rngArray) '8204 VT_ARRAY | VT_VARIANT rngArray = rng.Text Range("h3:l7") = SumOneToArray(rngArray) '1 VT_NULL End Sub コメントは、C++のコードに、 wsprintf(buf,"%d",sourceArray.vt); を足して、何が受け渡されているのか確認したものです。VT_...の方はWEBでそれらしいものを探してみました。rngArray = rngと、rngArray = rng.Valueは同じ物が渡されている様でした。最後のが動くのは不思議です。 実は、上記の確認のために、wsprintf(buf,"%d",sourceArray.vt);と、MessageBoxAを、下記の様な関数を追加して記述したのですが、その1はメモリがreadになれないとして、異常終了し、その2は、VBAのエラー49が出てDLLが参照できませんでした。DEFファイルには、myType関数を加えてあります。コピーして中味を単純化しただけのつもりですが、何がまずいのでしょうか?VBAのDeclareのデータ型も合っていると思うのですが。 Public Declare Function myType Lib _ "ExcelArray.dll" (ByVal X As Variant) As Variant(またはlong) <その1> VARIANT _stdcall myType(VARIANT& myArray) { char msg[256]; wsprintf(msg,"%d",myArray.vt); MessageBoxA(0, msg, "Variant Type", MB_OK); return (_variant_t((long)0)); VariantClear(&myArray); } <その2> long _stdcall myType(VARIANT& myArray) { 中略 return 0; VariantClear(&myArray); } 中味を理解する前に、初めの一歩でつまずいています。ご指導いただけると幸いです。 k様 教えていただいたコードは、他アプリからExcelを制御するような事例の、C/C++版だと理解しました。C/C++には詳しくなく、ExcelからC/C++製のDLLを使う事で、比較的楽にC/C++の高速さを享受できないかなと考えておりますので、ご了解下さい。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.