DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ソース記述の違いにつきまして

環境/言語:[Windows XP]
分類:[.NET]

2006/03/05(Sun) 10:36:11 編集(投稿者)

お世話になります。基本的な質問と思いますが宜しくお願いします。
@、Aどちら使用しても同じ結果になりますがどちらでも問題は無いでしょうか。又@とAとでは何か違いがあるのでしょうか。

Ret = SendMessage(child, &H0D , Len(txt), txt) 

@ <System.Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function SendMessage _
(ByVal hWnd As IntPtr,ByVal wMsg As Integer,ByVal wParam As Integer,ByVal lParam As String) As Integer _
End Function

A Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Integer, ByVal MSG As Integer,ByVal wParam As Integer, ByVal lParam As String) As Integer
><System.Runtime.InteropServices.DllImport("USER32.DLL", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
> Private Shared Function SendMessage _
> (ByVal hWnd As IntPtr,ByVal wMsg As Integer,ByVal wParam As Integer,ByVal lParam As String) As Integer _
> End Function

上と同じにするには

Declare Auto Function SendMessage Lib "user32.dll" _
(ByVal hWnd As Integer, ByVal MSG As Integer,ByVal wParam As Integer, ByVal lParam As String) As Integer

になります。

dllimport と declare は機能的にはあまり変わらないはずです。
どちらで宣言してもよいのですが,C#にはdeclareはないので,.NET語の中の
VBの方言みたいな気がして,私はdllimportの方が好きです。
YASさん、説明をして頂き良くわかりました。
>上と同じにするには
まで教えて頂きまして
ありがとうございました。
解決済み!
2006/03/05(Sun) 10:59:32 編集(投稿者)

Win32APIには「ANSI文字列(SHIFT-JIS)」を扱う関数と「Unicode文字列」を
扱う関数があります。それぞれ関数の後ろに「A」,「W」がつきます。
つまり,SendMessageには
「SendMessageA」
「SendMessageW」
の2つの関数があります。通常はWindows98/Meの場合には「A」の方,
Windows2000/XPの場合には「W」の方を使いますが,「Auto」を指定すると
実行環境に応じて選ばれるようになります。
強制的に指定するには
dllimportの場合「CharSet:=CharSet.Ansi」「CharSet:=CharSet.Unicode」
declareの場合declareの後ろに「Ansi」「Unicode」
と記述します。

なお,declareの「Alias "SendMessageA"」に相当するdllimportの記述は
「EntryPoint:="SendMessageA"」になります。
2006/03/05(Sun) 11:19:26 編集(投稿者)

> 通常はWindows98/Meの場合には「A」
> Windows2000/XPの場合には「W」
>「Auto」を指定すると実行環境に応じて選ばれるようになります。
SendMessageAは知っていましたが「W」は今回初めて知りました。
「Auto」を使用すれば実行環境に応じて選ばれることもわかりました。
詳しいご説明をして頂き使い方がわかりました大変勉強になりました。
本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板