WindowsXP VB6.0(SP5)
DLLファイルを利用するためにVC++用の記述をVB用に定義したいのですが
BOOL WINAPI Stop( void ) ;
INT WINAPI ModifyMode( int on, int off ) ;
の2つが定義できません。
調べながら記述してみたところ、1つは何とか動作しているようですが後はDLLが正しく呼び出せません。となります。
short WINAPI Pause( BOOL ONOFF ) ;
↓○
Public Declare Function Pause Lib "xxxxx.DLL" (ByVal ONOFF As Boolean) As Integer
Pause (True)
BOOL WINAPI Stop( void ) ;
↓×
Public Declare Function Stop Lib "xxxxx.DLL" (ByVal void As Boolean)
INT WINAPI Modify( int on, int off ) ;
?
VC++は全く分からず、VBも勉強中なものでお手上げ状態です。
よろしくお願い致します。
> short WINAPI Pause( BOOL ONOFF ) ;
> ↓○
> Public Declare Function Pause Lib "xxxxx.DLL" (ByVal ONOFF As Boolean) As Integer
> Pause (True)
それだとマズイと思いますよ。
ByVal ONOFF As Long にして、Pause(0) / Pause(1) で呼ぶのが適切かと。
VB6 の Boolean 型は「16 bit」の変数ですが、
C++ の BOOL 型は WinDef.h というファイルにて、
typedef int BOOL;
と定義されています。すなわち、「符号付き32bit整数型」です。
また、C++ の TRUE / FALSE は、1 / 0 ですが、
#define TRUE 1
#define FALSE 0
VB6 の True / False は -1 / 0 です。
Debug.Print CInt(True)
Debug.Print CInt(False)
> BOOL WINAPI Stop( void ) ;
引数に何を渡すのかにもよりますが…こうかな?
Public Declare Function StopAPI Lib "xxxxx" Alias "Stop" (ByVal void As Long) As Long
# Stop ステートメントと競合するため、StopAPI というエイリアス(別名)にしました。
> INT WINAPI Modify( int on, int off ) ;
WinDef.h での定義は
typedef int INT;
なので、int と INT は同義です。ゆえに、こうかな。
Public Declare Function Modify Lib "xxxxx" (ByVal pOn As Long, ByVal pOff As Long) As Long
# On は予約語なので、pOn という引数名に変更しました。
> > BOOL WINAPI Stop( void ) ;
> 引数に何を渡すのかにもよりますが…こうかな?
> Public Declare Function StopAPI Lib "xxxxx" Alias "Stop" (ByVal void As Long) As Long
ByVal As Long にする代わりに、ByRef As Any にするケースもあります。
また、複数の構造体(ユーザー定義型)などを渡す物だと、
Public Declare Function StopHoge Lib "xxxxx" Alias "Stop" (ByRef void As Hoge) As Long
Public Declare Function StopFoo Lib "xxxxx" Alias "Stop" (ByRef void As Foo) As Long
のように、それぞれの型ごとに定義を分けて対応することもあります。
魔界の仮面弁士さん
返信ありがとうございます。
これから教えて頂いたように記述しながら試して見ます!
ありがとうございました!!
>BOOL WINAPI Stop(void);
(void *) でなく (void) なら
Public Declare Function StopAPI Lib "xxxxx" Alias "Stop" () As Long
だと思うんですけど・・・
> (void *) でなく (void) なら
おぉっ。すみません、見誤っていました。
御指摘ありがとうございます。>ひろこさん
ツイート | ![]() |