tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルini.ファイルの設定
記事No708
投稿日: 2004/02/10(Tue) 10:38
投稿者フレッシュ
[OSのVer]:Windows XP   [VBのVer]:VB.NET2003

全くの初心者的な質問なのですが、
ini.ファイルの読み込みについて質問です。
過去ログを検索してみたところ、GetPrivateProfileString関数を使用すれば出来る
と書いてあって試してみたところわからないことがあるのでお聞きします。
WinAPIの宣言を設定するところで2つわからないので教えてください

・WinAPIを宣言するのにジェネラルプロシージャの所で宣言するんですよね?
そのジェネラルプロシージャとは一体どこにあるのでしょうか?(汗)
オブジェクト名のリストボックスに、
Geberalとは書かれてないのでどこに書いていいのでしょうか?(^^; (VB6.0は書いてあったような)
SystemWindowsの下に書けばいいのでしょうか?

・SystemWindowsの下に以下のことを書くと、ByVal lpKeyName As Anyの 'As Any' は、'Declare' ス
テートメントではサポートされていません。というエラーが返ってきてしまいます

Public Declare Function GetPrivateProfileInt Lib "kernel32" _
                         Alias "GetPrivateProfileIntA" _
                         (ByVal lpApplicationName As String, _
                          ByVal lpKeyName As String, _
                          ByVal nDefault As Long, _
                          ByVal lpFileName As String) As Long

Any型ではないとすると、変数の型は何をすればよいのでしょうか?
よろしくお願いします。

[ツリー表示へ]
タイトルRe: ini.ファイルの設定
記事No709
投稿日: 2004/02/11(Wed) 13:16
投稿者魔界の仮面弁士
> Geberalとは書かれてないのでどこに書いていいのでしょうか?(^^; (VB6.0は書いてあったような)
Geberal ではなく、General ですよね。

VS.NET 2003では、リスト中の (全般) というのが VB6 の General に相当します。

ただ、VB6では、全てのプロシージャの前(かつ、Option Explicitの後)に宣言文を書く必要が
ありましたが、VB.NETでは、ModuleやClassの内側であればどこでもOKとなっています。
(プロシージャ内での宣言はできませんが)

例えば、
  Public Class Form1 : Inherits System.Windows.Forms.Form
    Private Declare ……  '★★ここに記述★★
    Private Sub Form1_Load(…)…
       '
       '
    End Sub
  End Class
のような書き方もできますし、
  Public Class Form1 : Inherits System.Windows.Forms.Form
    Private Sub Form1_Load(…)…
       '
       '
    End Sub
    Private Declare ……  '★★ここに記述★★
  End Class
などと書く事も出来るという事です。


> ByVal lpKeyName As Anyの
あれ? この引数を Any型にしている理由は何ですか?
たとえVB6だとしても、この引数を Anyにする必要性が感じられないのですが…。


> 'As Any' は、'Declare' ステートメントではサポートされていません。というエラーが返ってきてしまいます
引数型のオーバーロードがサポートされたため、Anyは廃止されました。
適切な型(As Stringなど)に置き換えてください。

例えば、「Stringを渡すこともあるし、整数を渡すこともある」というAPIなら、
   'for VB6
   Private Declare Sub hage Lib "hige" (ByVal hoge As Any)
と書くかわりに、
   'for VB.NET
   Private Declare Sub hage Lib "hige" (ByVal hoge As String)
   Private Declare Sub hage Lib "hige" (ByVal hoge As Int32)
のように、同じ関数名を異なる引数宣言で2重定義すればOKです。


# ちなみにVB6の場合は、オーバーロードができないため、Anyを使わずに対処する場合は、
#   Private Declare Sub hageByString Lib "hige" Alias "hage" (ByVal hoge As String)
#   Private Declare Sub hageByLong   Lib "hige" Alias "hage" (ByVal hoge As Long)
# のように、関数名そのものを変更する必要がありました。

[ツリー表示へ]
タイトルRe^2: ini.ファイルの設定
記事No714
投稿日: 2004/02/16(Mon) 10:16
投稿者フレッシュ
[OSのVer]:Windows    [VBのVer]:VB.NET  
> > Geberalとは書かれてないのでどこに書いていいのでしょうか?(^^; (VB6.0は書いてあった
ような)
> Geberal ではなく、General ですよね。
どうもすいません。 General です・・・(汗)
>
> VS.NET 2003では、リスト中の (全般) というのが VB6 の General に相当します。
>
> ただ、VB6では、全てのプロシージャの前(かつ、Option Explicitの後)に宣言文を書く必要が
> ありましたが、VB.NETでは、ModuleやClassの内側であればどこでもOKとなっています。
> (プロシージャ内での宣言はできませんが)
>
> 例えば、
>   Public Class Form1 : Inherits System.Windows.Forms.Form
>     Private Declare ……  '★★ここに記述★★
>     Private Sub Form1_Load(…)…
>        '
>        '
>     End Sub
>   End Class
> のような書き方もできますし、
>   Public Class Form1 : Inherits System.Windows.Forms.Form
>     Private Sub Form1_Load(…)…
>        '
>        '
>     End Sub
>     Private Declare ……  '★★ここに記述★★
>   End Class
> などと書く事も出来るという事です。
>
>
> > ByVal lpKeyName As Anyの
> あれ? この引数を Any型にしている理由は何ですか?
> たとえVB6だとしても、この引数を Anyにする必要性が感じられないのですが…。
インターネットで調べた所、構文をそのままコピーすれば出来ると書いてあったので
Any型を使用したところ、エラーが発生・・・。(;;)
>
>
> > 'As Any' は、'Declare' ステートメントではサポートされていません。というエラーが返っ
てきて
しまいます
> 引数型のオーバーロードがサポートされたため、Anyは廃止されました。
> 適切な型(As Stringなど)に置き換えてください。
>
> 例えば、「Stringを渡すこともあるし、整数を渡すこともある」というAPIなら、
>    'for VB6
>    Private Declare Sub hage Lib "hige" (ByVal hoge As Any)
> と書くかわりに、
>    'for VB.NET
>    Private Declare Sub hage Lib "hige" (ByVal hoge As String)
>    Private Declare Sub hage Lib "hige" (ByVal hoge As Int32)
> のように、同じ関数名を異なる引数宣言で2重定義すればOKです。
>
>
> # ちなみにVB6の場合は、オーバーロードができないため、Anyを使わずに対処する場合は、
> #   Private Declare Sub hageByString Lib "hige" Alias "hage" (ByVal
hoge As String)
> #   Private Declare Sub hageByLong   Lib "hige" Alias "hage" (ByVal
hoge As Long)
> # のように、関数名そのものを変更する必要がありました。

ご教授どうもありがとうございました。
またわからないことがありましたらよろしくお願いします

[ツリー表示へ]