
No.3ベストアンサー
- 回答日時:
私の知識不足のためにお手間かけさせてすみませんでした。
(バージョン間の差異についての常識を把握できていないもので。)
結論としては、普通にPCharでキャスト(型変換)すればOkです。
ShellExecute(Handle, 'open', 'xxx.rb', PChar(OpenDialog1.FileName), PChar(syori), SW_SHOWNORMAL);
よく分からなかったのは、"PAnsiChar"とエラーが出たことです。(それとバージョン不明)
Delphi6ですと、宣言内容と一致する「'TFileName' と 'PChar' には互換性がありません」と出ます。
お手間のおわびにちょっと解説します。
・ PChar(OpenDialog1.FileName), PChar(syori)
これらはPChar型です。OpenDialog1.FileNameはTFileName型ですが、これは TFileName = type string; と宣言されており、実質的にはString型です。syoriはおそらくString型ですよね。それぞれPChar()という形でキャストすることによりPChar型に出来ます。
・ 'open', 'xxx.rb'
これらもPChar型なので PChar('open'), PChar('xxx.rb') として良いのですが…、文字列リテラルの場合はコンパイラが適切に解釈し、宣言に合わせてPChar型と扱ってくれるので 'open', 'xxx.rb' のように省略できます。constで宣言する文字列定数でも同様です。
・ PChar型はヌルを終端とする文字列へのポインタ型です。C言語等で使われているものと同一です。DelphiではString型をPChar()という形でキャストすることにより、簡単にPChar型を得ることが出来ます。PChar型はAnsi Delphi(D2007以前)ではPAnsiChar型のエイリアス、Unicode Delphi(D2009以降)ではPWideChar型のエイリアスになります。
・ PAnsiChar型は内部がShift_JIS、ヌルはBYTE型の 0 です。
・ PWideChar型は内部がUnicode(UTF-16LE)、ヌルはWORD型の0(≒2byteの 0 0)です。
No.4
- 回答日時:
言い忘れてましたが、カテゴリが
デジタルライフ > ソフトウェア > その他(ソフトウェア)
になってますけど、
[技術者向] コンピューター > プログラミング > その他(プログラミング)
こっちの方がいいと思います。
No.2
- 回答日時:
ううう、、、それはimplementation部(実現部)にある、DLL関数のexternal宣言ですね。
それじゃないんです。
interface部(インターフェース部)にある、{$EXTERNALSYM … とか書かれた行を含む部分です。
今一度、例示と手順を良く見てください。
>その状態で ShellExecute( を検索すれば早いです。
もっと詳しく言うと、
その状態でCtrl+Fを押し、ShellExecute(を検索して探してみてください。
ShellExecuteの後にカッコが付いてます!
実は…
バージョンとexternal宣言が確認できた今、9割以上の確信で回答できるのですが、
確実なものにしたいのでShellExecute関数の宣言を確認したいです。
この回答への補足
ごめんなさい。
お手数をおかけします。
これでよろしいんでしょうか?
{$EXTERNALSYM ShellExecute}
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PChar; ShowCmd: Integer): HINST; stdcall;
{$EXTERNALSYM ShellExecuteA}
function ShellExecuteA(hWnd: HWND; Operation, FileName, Parameters,
Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall;
{$EXTERNALSYM ShellExecuteW}
function ShellExecuteW(hWnd: HWND; Operation, FileName, Parameters,
Directory: PWideChar; ShowCmd: Integer): HINST; stdcall;
No.1
- 回答日時:
Delphiのバージョンを記載し、コードは手書きでなく必ずコピー&ペーストしてください。
全角記号等が混じってると戸惑いますので。
すぐに回答したいのですが、よく分からない点があるので…、
お手数ですがShellAPI.pasからShellExecute関数の宣言部分(3つあり)を抜き出して提示して下さい。
こんな感じで。(これはDelphi6)
-----------------------------------------------------------------
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PChar; ShowCmd: Integer): HINST; stdcall;
{$EXTERNALSYM ShellExecuteA}
function ShellExecuteA(hWnd: HWND; Operation, FileName, Parameters,
Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall;
{$EXTERNALSYM ShellExecuteW}
function ShellExecuteW(hWnd: HWND; Operation, FileName, Parameters,
Directory: PWideChar; ShowCmd: Integer): HINST; stdcall;
-----------------------------------------------------------------
IDE上でShellExecuteにキャレットを置き、右クリック→定義の検索でShellAPI.pasが表示されます。
その状態で ShellExecute( を検索すれば早いです。
この回答への補足
回答ありがとうございます。
助かります。
>Delphiのバージョンを記載し、コードは手書きでなく必ずコピー&ペーストしてください。
>全角記号等が混じってると戸惑いますので。
ごめんなさい、以後気をつけます。
Delphiのバージョンは2005です。
関数の宣言部分は
function ShellExecute; external shell32 name 'ShellExecuteA';
function ShellExecuteA; external shell32 name 'ShellExecuteA';
function ShellExecuteW; external shell32 name 'ShellExecuteW';
となっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- PDF acrobatでwordファイルをpdfに変換すると文字化けする 3 2023/02/10 09:31
- Visual Basic(VBA) Vba 互換モードでのAppActiveについて教えてください 2 2022/06/27 18:47
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- モニター・ディスプレイ 古いモニターに表示されない 4 2023/06/06 09:25
- Java コンソールから所属財産を入力(単位:万円 1000~100000以内でIntegerに変換できない場 2 2022/05/31 21:32
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
安値でグラフィックソフトが販...
-
PSD形式対応のサムネイル作成&...
-
XPERIA z5でBluetoothのイヤホ...
-
OutlookとOutlook Expressの違い
-
Edgeのバージョンをグレードダ...
-
DVDFab8とDVDFab9
-
イラストレーターでお奨めのバ...
-
マイクロキャダムで作成したDXF...
-
コピペすると白い枠まで
-
右クリックで出る一覧がすぐ消...
-
ビル・ゲイツは評判悪いですが...
-
Office2021を別のPCにインスト...
-
ソフトの再インストール及び著作権
-
IE7にしたら英語に
-
オフィス365を使用。他のパソコ...
-
libreあればopen office削除し...
-
マイクロソフトのアカウントは...
-
新しいパソコンを買いました。
-
OEM版が他のPCでライセンス認証...
-
Windows10のプロダクトキーを2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Edgeのバージョンをグレードダ...
-
自分が書いているCSSのバー...
-
右クリックで出る一覧がすぐ消...
-
ファイルをVisio→.dxfに変換後A...
-
(Excel)エクセルのバージョンご...
-
adobeのイラストレータよりコー...
-
筆ぐるめでの文字入力について
-
Quick time ムービーのコントロ...
-
Delphiの型変換について教えて...
-
イラストレーターCCでバージョ...
-
HULFTについてのご質問です。
-
ソフトウェアのバージョン表記
-
EaseUS Todo Backup
-
シムシティ3000について。
-
TeamViewerのエラー
-
Corei7-12700とVmwareWorkstati...
-
上位バージョンのIllustratorで...
-
B's Recorder Gold9のアップデータ
-
Adbe Acrobat 古いバージョン...
-
Illustrator CS2・ CS・ 10 違...
おすすめ情報