VC++用の記述をVB用に定義するには


jack  2007-06-13 06:39:28  No: 98977

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も勉強中なものでお手上げ状態です。
よろしくお願い致します。


魔界の仮面弁士  2007-06-13 06:59:31  No: 98978

> 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 という引数名に変更しました。


魔界の仮面弁士  2007-06-13 09:00:37  No: 98979

> > 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
のように、それぞれの型ごとに定義を分けて対応することもあります。


jack  2007-06-13 18:19:46  No: 98980

魔界の仮面弁士さん
返信ありがとうございます。
これから教えて頂いたように記述しながら試して見ます!
ありがとうございました!!


ひろこ  2007-06-14 07:51:48  No: 98981

>BOOL WINAPI Stop(void);

(void *) でなく (void) なら

Public Declare Function StopAPI Lib "xxxxx" Alias "Stop" () As Long

だと思うんですけど・・・


魔界の仮面弁士  2007-06-14 21:16:04  No: 98982

> (void *) でなく (void) なら
おぉっ。すみません、見誤っていました。

御指摘ありがとうございます。>ひろこさん


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

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






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