DLLの配列渡しをするには??

解決


けん  2004-11-19 02:57:41  No: 86746

VC側から配列をVBに返そうと思ってます。
しかし、VB側で実行開始すると
「readになることはできませんでした」というエラーが。
どうやって配列渡しが可能なのでしょうか?

VC側でmarkerPosという配列を用意して、VB側から呼び出したいのです。
以下ソースです。

VC側
_declspec(dllexport) short _stdcall markerInfo(short* markerPos)
{  
  markerPos[0] = 0;
  markerPos[1] = 1;
  markerPos[2] = 2;
  markerPos[3] = 3;
  markerPos[4] = 4;
  markerPos[5] = 5;
  markerPos[6] = 6;
  markerPos[7] = 7;
  markerPos[8] = 8;
  markerPos[9] = 9;
  markerPos[10] = 10;
  markerPos[11] = 11;
  return* (markerPos);
}

VB側
'モジュール内
Private Declare Function markerInfo Lib "tracker.dll" (ByVal markerPos As Single) As Single
Public markerPos(12) As Single
Public markerPosition(12) As Single 'VC++側へ渡す設定データ

'ボタンアクション
markerPosition = markerInfo(markerPos(0))


もっつう  2004-11-19 03:11:46  No: 86747

>Private Declare Function markerInfo Lib "tracker.dll" (ByVal >markerPos As Single) As Single
>Public markerPos(12) As Single
>Public markerPosition(12) As Single 'VC++側へ渡す設定データ
>
>'ボタンアクション
>markerPosition = markerInfo(markerPos(0))

ここらがおかしい気がする。


けん  2004-11-19 03:27:25  No: 86748

失礼します。
VB側を以下のように変えてみたら、配列の取得できました。
しかし、数値がおかしなことになってしまいました。
たとえば、VCから"1"という数値を渡すとVBでは"9.18355E-41" という風に。
これは一体何故なのでしょうか?

VB側
'モジュール内

Private Declare Sub markerInfo Lib "traker.dll" (ByRef markerPos As Single)
Public markerPos(12) As Single

Call markerInfo(markerPos(0))


まき  2004-11-19 03:53:09  No: 86749

VB6,VC6だと仮定しますが、

VCでshortなら、VBではIntegerでは?


けん  2004-11-19 04:59:43  No: 86750

まきさん

ありがとうございます。

>VCでshortなら、VBではIntegerでは?
VCのshortをfloatにかえてみたら動きました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加