PB 電子会議室
カテゴリ:スクリプトの記述
日付:2000年07月27日 17:36 発信者:ryochan
題名:RE(8):PB7.0: ShellExecute関数を使ってHP表示ができません。
STRATOVARIUSさん、こんにちは。
APIで文字列を使用するには以下のことを認識しなければいけません。
1.LPCSTR:const char* 定数文字列への 32 ビット ポインタ。 refはいらない
→string で宣言できる。
2.LPSTR:char* 文字列への 32 ビット ポインタ。
→refが必要さらに long型によりアドレスの受け渡しが必要。
3.LPCTSTR:const wchar_t* Unicode と DBCS への移植性が高い定数文字列への
32 ビット ポインタ。→:ref はいらない。stringで宣言できる。
4.LPTSTR:wchar_t* Unicode と DBCS への移植性が高い文字列への32 ビット ポインタ。
→ref string で値を取得できるが、最初に領域確保が必要。space関数
(但し、どちらもchar*としてLPCTSTR=LPCSTR、LPTSTR=LPSTRの場合もあります。ここが混乱の元。)
ポインタには定数ポインタと非定数ポインタがあります。
非定数ポインタは参照渡しでアドレスでやりとりしなければいけません。
アドレスで受け取ったのをstring型変数に格納するには
RtlMoveMemory APIを使用します。
LPTSTRにかぎっては上記に述べましたがstring型でも参照渡しが行えます。
ただし、上記にも書いたようにできないこともあります。
定数ポインタに関してはstringでそのまま値渡しでかまいません。
(多分PBが自動でnull終端文字列に変換しているかな。どうなのでしょう?)
ここで、shellexecuteAなのですが、最後のAというのは32ビット用という意味です。
MSDNではこのように宣言されています。
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
よってLPCTSTRは定数ポインタなのでrefは必要ありません。
上記の説明で間違っているところがあれば、指摘をお願いします。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows NT 4.0
DBMS (記載なし)
Browser InternetExplorer5.X
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.