XE2を使って、2009で作ったプログラムを実行させると、Ord()関数のところでエラーになります。
n:integer;
s:string;
n:=ord(s[2]);
Int64では使えないようですが、作れないでしょうか。
使い方が悪いのかもとも思いますが、ご存知の方、ご教授願います。
こんにちは,Mr.XRAYです.
>Int64では使えないようですが、
何がInt64で使えないのですか?
>Ord()関数のところでエラーになります。
どんなエラーが出るのですか?
もしかして,
Int64では使えない ---> 「Int64が使えない」の間違い?
とすると,どこでInt64が使えないのでしょうか?
http://docwiki.embarcadero.com/Libraries/ja/System.Ord
Ord は Int64 値では動作できません。
だそーです
今晩は。
皆さん、ありがとうございます。
コンパイルはできます。
しかし、実行すると、エラーになります。
特定するのに、時間がかかりました。
で、helpで調べると、Int64では動作できないと書いてありますが、
対処法が示されていません。
作るしかないかなと思うんですが、作成方法が分かりません。
よろしくお願いします。
Ordは引数として、Int64以外の任意の順序型を取ります(Charも順序型の一種です)
そのヘルプの説明は「Int64以外の順序型」ということを言っているだけで、問題とはまったく関係ありません。
XE2ということだとAnsiString⇔UnicodeStringの関係かとも思いましたが
WideCharの範囲は16ビット(#$0000〜#$FFFF)だから別に問題ないですよね。
同じコードでテストしてみましたが(もちろんsには 'テスト' みたいな文字列を入れて)コンパイルも実行も正常にできましたよ。
> コンパイルはできます。
> しかし、実行すると、エラーになります。
具体的なエラーメッセージを書いてくれませんか? エラーメッセージは問題を特定するための非常に重要な情報です。
上にも書いたようにそのコードだけでは問題が再現しないので、実際に再現する最小限のコードも示してもらえると有り難いです。
こんばんわ。
使い方は Ord(列挙型) だと思いますが、Int64の順序値を持つ列挙型なんて
どうっやって作ってるんでしょう?(自分は作れません...)
ちなみに、順序値は、キャストでも値は得られますので、Ord64(?)は作る必要はないかと。
以下の3つの例は同じ結果が得られました。
n := Ord(X);
n := Integer(X);
n := Int64(X); // 意味があるか分かりませんが...
いや,その,あの,スミマセン.
その前に,質問された方の文章には,Int64っていうのが
どこにも,ないような気がするんですけど,
>文章には
失礼しました.「コードには」の間違いです.
そう、Int64はまったく関係ありません。
ヘルプに「Int64は使えない」と書いてあるので、質問者さんが「エラーになるのはこのせいだ」と早合点しているだけだと思います。
上にも書いたように、関数の使い方自体に問題は見受けられませんし、テストしてもエラーは再現しません。
どこか別の所に原因があると思うのですが、後は詳細な情報待ちですね。
失礼しました...おととい出直します。
皆さん、こんにちは。
昨日は、家にいませんでしたので、返事できませんでした。
早速、下記のように変えて、実行しましたが、
「charとintegerには互換性がありません」というエラー表示が出て、コンパイルできません。
var
S: string; { 変換する文字列 }
n: widechar;
begin
s:=edit1,text;
n:=Ord(S[2]);
もとに反して実行した時のエラーは、
「アドレス000000000○○○○で、アドレス000000000000****に対する読み取り違反が起きました。」
です。もちろん、2009でコンパイルするとこのようなエラーは起きません。
また、どうぞよろしくお願いします。
失礼しました。
n:=ord(widechar(s[2]));
とするんでしたね。
ありがとうございました。
早速試してみます。
ありがとうございました。
無事に実行できるようになりました。
今までの経験では、まだまだいろいろと問題が出てくると思われます。
その節は、またお願いします。
ツイート | ![]() |