- - PR -
VB6からVCで自作したDLLへByte配列をパラメータとして送る方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-06-25 15:06
現在、VB6 VC++を使っています。
VB6からByte配列の変数を VC++で自作したDLL内のAPI関数に送りたいのですが、 うまく送れません。 ◎VB6 Declare Function CRC16 Lib "TEST01.DLL" (ByVal a As Byte) Private Sub Command1_Click() Dim TEST01(10) As Byte TEST01(0) = &H32 TEST01(1) = &H34 Call CRC16(TEST01) End Sub ◎VC++のDLL int WINAPI CRC16(unsigned char *a){ int ab; ab = (int)*(a+0); ab = (int)*(a+1); return 0; } 上記の様に作成しましたが、VC++のデバッグモードで*(a+0),*(a+1)を 確認した所、下記の通りとなりました。 *(a+0)=&H3F *(a+1)=0 : : *(a+10)=0 別のDLL内APIについては、正常にパラメータの値が遅れるのですが、 例えば int WINAPI Add(int a,int b){ return a + b; } など。 インターネットで検索しても、なかなか見つけることが出来ませんでした。 基本的な話ではありますが、ご教示の程宜しくお願いします。 |
|
投稿日時: 2007-06-25 17:43
>Declare Function CRC16 Lib "TEST01.DLL" (ByVal a As Byte)
Declare Function CRC16 Lib "TEST01.DLL" (ByRef a As Byte) >Call CRC16(TEST01) Call CRC16(TEST01(0)) でどうでしょうか? VB側で >Call CRC16(TEST01) のように配列型で渡す場合、DLL側もSAFEARRAYで受けるように変更しないと うまくいきません。 |
|
投稿日時: 2007-06-25 18:31
回答ありがとうございました。
出来ました。 ByRefでもやってみたんですが・・・・。 たぶん、いろいろやっているうちにソースを壊してしまっていたか 他の設定に変更したのか・・・。 だから、だめだったんでしょうねぇ・・・。 |
|
投稿日時: 2007-06-25 18:35
固定サイズの配列を直接渡したい場合は
Public Type FixedSizedByteArrayRec byteData(10) as Byte End Type の様に配列をメンバに含む構造体を宣言して、それを引数としてByRefで渡すという手もあります。 |
1