映画のエンドロール観る派?観ない派?

プログラミング初心者です。
VB2010からC++で作成したDLLの配列連携で困っています。
下記のサンプルで整数配列(integer)の連携を確認できました。

しかし、double型の連携が同サンプルでは正しい値が渡されません。
(プラットフォーム呼び出しサンプルの”整数 ByVal の配列”を使用しました。)

プラットフォーム呼び出しサンプル
http://msdn.microsoft.com/ja-jp/library/8bbftkst …

double型の配列は同じ方法で可能なのでしょうか。
別の方法でないと動作しないのであれば、そちらも教えてください。
よろしくお願い致します。

A 回答 (2件)

VBの配列はC言語から見るとSAFEARRAY型になります。


これを上手く扱えないと、VB⇔Cの処理は難しくなります。
×:func(double *param)
○:func(SAFEARRAY *param) ★ByValの場合です。

これを扱うAPIがOLEAUT32にあります。
#pragma comment(lib,"OLEAUT32.LIB")をソースに
記述するか、リンカでこのライブラリを指定します。

http://marupeke296.com/IKDADV_CPP_SAFEARRAY.html
この辺にサンプルがあるので、調べてみてください。
    • good
    • 0
この回答へのお礼

回答有難うございます。参考にさせて頂きます。

お礼日時:2011/01/10 22:17

単純な1次元配列なら



DLL側を
__declsepc(dllexport) void __stdcall foo( double* pSrc, int nLen )
といった具合に定義します

pSrcは配列へのポインタ nLenが配列の大きさ

VB.NET側では

Declare Sub foo lib "DLL名" ( ByRef d1 as double, ByVal nLen as integer)
と定義しておいて

使用時には
dim a(20) as Double
' 配列の初期化処理などを記述
foo( a(0), a.Length )
といった具合に使います


質問時に どのようなコードを書いて 実行したかを明記したほうがいいでしょう
期待する結果と 実際の結果がどのように食い違っているかも出来る限り具体化すると回答がつきやすいですよ
    • good
    • 0
この回答へのお礼

回答有難うございます。質問時の注意点も参考にさせて頂きます。

お礼日時:2011/01/10 22:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!