64bit版DLLとの値の受け渡しがうまくいかない
- 題名: 64bit版DLLとの値の受け渡しがうまくいかない
- 著者: shouichi_M3
- 日時: 2012/06/28 13:40:17
- ID: 30651
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 64bit版DLLとの値の受け渡しがうまくいかない
- 著者: Hongliang
- 日時: 2012/06/28 14:13:34
- ID: 30652
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 64bit版DLLとの値の受け渡しがうまくいかない
- 著者: shouichi_M3
- 日時: 2012/06/28 14:25:25
- ID: 30653
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: 64bit版DLLとの値の受け渡しがうまくいかない
- 著者: YuO
- 日時: 2012/06/28 16:17:41
- ID: 30654
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: 64bit版DLLとの値の受け渡しがうまくいかない
- 著者: shouichi_M3
- 日時: 2012/06/28 17:51:13
- ID: 30655
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
2012/06/28(Thu) 14:30:51 編集(投稿者)
はじめまして。
Windows7(32Bit) で利用していたDLLをWindows7(64Bit)へ移植する必要が発生し
調べているうちにここへたどり着きました。
VB2005でテストプログラムを作成し、とVC2005でテスト用DLLを作成したのですが
VB側exeをターゲットCPUをx86、VC側DLLをWin32でコンパイルすれば正常に動作する
関数が、VB側exeをターゲットCPUをx64、VC側DLLをx64でコンパイルすると異常な動作になります。
VB側のプログラム----------
Declare Sub TEST_FUNC Lib "MPL.dll" ( Byref Source As Byte )
Private Sub Command1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
Private wdata1(DATA - 1) As Byte
Dim i As Long
For i = 0 To DATA - 1
wdata1(i) = i
Next
TEST_FUNC(wdata1(0))
End Sub
VC側のプログラム----------
void TEST_FUNC(char *pnData)
{
long i;
short int iDat1;
for(i=0;i<10;i++){
iDat1 = *pnData;
sprintf(bufDBG,"iDat1 = %x\n",iDat1);
OutputDebugString(bufDBG);
pnData++;
}
}
正常に動作すれば、VC側でpnDataポインタで0,1,2,3,4,5,6,7,8,9と参照できると思うのです。x86でコンパイルするとそのように動作するのですが、x64でコンパイルすると、まったく関係ない値が取得されます。
64ビットネイティブコードでDLLを作成する必要があります。
(WOW64は使えない環境というかWOW64に対応していないデバイスを利用する必要がある。)
なぜこのような違いが生まれるのでしょうか?
よろしくお願いいたします。