- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB.NETからC++のdll連携(double))
VB.NETからC++のdll連携(double)について
このQ&Aのポイント
- プログラミング初心者です。VB2010からC++で作成したDLLの配列連携で困っています。整数配列の連携は確認できましたが、double型の連携が上手くいきません。
- プラットフォーム呼び出しサンプルを使用しているのですが、「整数 ByVal の配列」ではなく、double型の配列の連携方法を教えていただきたいです。
- もし、別の方法でないと動作しない場合は、その方法も教えていただきたいです。よろしくお願い致します。
- みんなの回答 (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 この辺にサンプルがあるので、調べてみてください。
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.1
単純な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 ) といった具合に使います 質問時に どのようなコードを書いて 実行したかを明記したほうがいいでしょう 期待する結果と 実際の結果がどのように食い違っているかも出来る限り具体化すると回答がつきやすいですよ
質問者
お礼
回答有難うございます。質問時の注意点も参考にさせて頂きます。
お礼
回答有難うございます。参考にさせて頂きます。