VBプログラマ質問スレ(Ver.6.0 まで) part62
at TECH
1:デフォルトの名無しさん
13/02/15 16:54:12.79
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。
VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。
○ 質問者の心得
一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。
二.VBScript、インストーラーなどはこのスレでOK。
三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。
四.荒らしは相手しない。
○ 回答者の心得
一.答えられない質問は無駄に罵倒せずスルー。無理するな。
二.代用法を強制しない。
三.回答する上で必須ではない情報をむやみに聞き返さない。
四.荒らしは相手しない。
五.VB情報募集中。
六.回答は質問者が理解できるよう具体的に。
MSDN Online Japan ホーム
URLリンク(www.microsoft.com)
Visual Studio 6.0 Service Pack 6
URLリンク(msdn.microsoft.com)
Google
URLリンク(www.google.co.jp)
前スレ VBプログラマ質問スレ(Ver.6.0 まで) part61
スレリンク(tech板)
※「まず自分で調べる」クセを身につけよう。
2:デフォルトの名無しさん
13/02/15 16:54:45.93
Part 1 URLリンク(piza2.2ch.net)
Part 2 URLリンク(piza2.2ch.net)
Part 3 URLリンク(piza2.2ch.net)
Part 4 URLリンク(pc.2ch.net)
Part 5 URLリンク(pc.2ch.net)
Part 6 URLリンク(pc.2ch.net)
Part 7 URLリンク(pc.2ch.net)
Part 8 URLリンク(pc.2ch.net)
Part 9 URLリンク(pc.2ch.net)
Part10 URLリンク(pc.2ch.net)
Part11 URLリンク(pc.2ch.net)
Part12 URLリンク(pc3.2ch.net)
Part13 URLリンク(pc3.2ch.net)
Part14 URLリンク(pc3.2ch.net)
Part15 URLリンク(pc3.2ch.net)
Part16 URLリンク(pc3.2ch.net)
Part17 URLリンク(pc3.2ch.net)
Part18 URLリンク(pc3.2ch.net)
Part19 URLリンク(pc3.2ch.net)
Part20 URLリンク(pc2.2ch.net)
Part21 URLリンク(pc2.2ch.net)
Part22 URLリンク(pc2.2ch.net)
Part23 URLリンク(pc2.2ch.net)
Part24 URLリンク(pc2.2ch.net)
Part25 URLリンク(pc2.2ch.net)
Part26 URLリンク(pc2.2ch.net)
Part27 URLリンク(pc2.2ch.net)
Part28 URLリンク(pc2.2ch.net)
Part29 URLリンク(pc2.2ch.net)
3:デフォルトの名無しさん
13/02/15 16:55:08.89
Part30 スレリンク(tech板)
Part31 スレリンク(tech板)
Part32 スレリンク(tech板)
Part33 スレリンク(tech板)
Part34 スレリンク(tech板)
Part35 スレリンク(tech板)
Part36 スレリンク(tech板)
Part37 スレリンク(tech板)
Part38 スレリンク(tech板)
Part39 スレリンク(tech板)
Part40 スレリンク(tech板)
Part41 スレリンク(tech板)
Part42 スレリンク(tech板)
Part43 スレリンク(tech板)
Part44 スレリンク(tech板)
Part45 スレリンク(tech板)
Part46 スレリンク(tech板)
Part47 スレリンク(tech板)
Part48 スレリンク(tech板)
Part49 スレリンク(tech板)
Part50 スレリンク(tech板)
Part51 スレリンク(tech板)
Part52 スレリンク(tech板)
Part53 スレリンク(tech板)
Part54 スレリンク(tech板)
Part55 スレリンク(tech板)
Part56 スレリンク(tech板)
Part57 スレリンク(tech板)
Part58 スレリンク(tech板)
Part59 スレリンク(tech板)
Part60 スレリンク(tech板)
4:デフォルトの名無しさん
13/02/15 20:00:43.00
Part61 スレリンク(tech板)
5:デフォルトの名無しさん
13/02/16 00:38:58.57
>>1
おつ
6:デフォルトの名無しさん
13/02/16 07:45:27.47
>>1
おつ
7:デフォルトの名無しさん
13/02/16 15:20:12.53
>>1
おつ
8:デフォルトの名無しさん
13/02/16 17:29:02.07
マジかよ
VB6で動的にDLLを使うの無理なのかよ
Susieプラグインとか使えねえじゃn
9:デフォルトの名無しさん
13/02/16 17:33:01.35
>>8
使えるが?
たとえばExcelオブジェクトをCreateObjectするとか
そういうことだろ
10:デフォルトの名無しさん
13/02/16 17:33:38.36
VBPs of Visual Basic
URLリンク(www1.koalanet.ne.jp)
タイトル Susie Plug-inを動的に利用する
分類 VB6で作成したクラス化を伴うサンプル
特徴 VBのランタイムとWindowsAPI関数のみを使って、実行時にロードした
DLL内の関数を利用します。
11:デフォルトの名無しさん
13/02/16 17:40:16.75
cdeclで呼び出されているDLL関数をVB6で使う方法ってある?
今とても困ってます。
12:デフォルトの名無しさん
13/02/16 18:41:28.43
あるわけねーだろ。はい論破。
13:デフォルトの名無しさん
13/02/16 18:46:19.34
>>11
VB6で使えるように(他の言語で)
ラッピングすれば良い。
バインディングってやつさ。
14:デフォルトの名無しさん
13/02/16 19:08:40.37
>>13
理論的にはできても実際には不可能だよ
15:デフォルトの名無しさん
13/02/16 19:11:11.13
はい論破
1. Declareステートメントではstdcall呼び出し規約しか使えない?
→ 「VB6.0 で swprintf を使ってみる +α」、「VB で機械語を実行する - プログラミングの丘」より、cdecl呼び出し規約の関数も呼び出すことが出来ます。
16:デフォルトの名無しさん
13/02/16 19:16:12.90
記事としてはよく見るが宣伝だろ?
実際に出来たというコードを見た事がないな
17:デフォルトの名無しさん
13/02/16 19:22:09.18
あるdllのエクスポート関数がstdcallで宣言されているかcdeclで宣言されているか
簡単に見極める方法ってないかな?
18:デフォルトの名無しさん
13/02/16 19:24:11.25
>>16
見たことがある。はい論破。
19:デフォルトの名無しさん
13/02/16 19:25:35.81
>>17
そんな事ができれば苦労はないわ。カットアンドトライでどっちかが動くかやってみろ。
確率1/2だろうがwww はい論破。
20:デフォルトの名無しさん
13/02/16 19:27:16.48
VB6でアセンブラって・・・。
なんか昔のボーランド Turbo Cのインラインアセンブラを彷彿とさせるね。
これは目から鱗ですわw
21:デフォルトの名無しさん
13/02/16 19:33:46.52
昔からBASICと機械語はよく組み合わせられる。
昔有名だったベーシックマガジン
通称ベーマガの投稿プログラムでも
DATA文で機械語を入力実行していた
22:デフォルトの名無しさん
13/02/16 19:47:01.48
>>21
一見水と油の関係のように思えるが面白いもんだね。
23:デフォルトの名無しさん
13/02/16 19:53:09.39
>>17
逆アセンブルすればええやん。リバースエンジニアリングってやつよ。
24:11
13/02/16 20:04:35.17
CallCdeclFunctionを使ってみました。完璧です!
これだとcdecl DLLをラップしたstdcall DLLを作成する必要がなく
ダイレクトに使えて非常に使いやすいです。
心より感謝申し上げますm(_ _)m
25:デフォルトの名無しさん
13/02/16 20:06:24.72
俺も今までこの手の事をするのにVC++ 6.0でラッパーDllを作ってたわ
世の中には頭イイ人がいるもんだな
26:デフォルトの名無しさん
13/02/16 20:07:00.15
認めない。VBでcdeclは呼び出せない。絶対に認めない。はい論破。
27:11
13/02/16 20:29:21.38
>>26
cdeclで呼び出されているDLL関数をVB6で使う方法が知りたかったので
VB6の機能としてcdeclが直接呼び出せなければならないことはありませんでした。
28:デフォルトの名無しさん
13/02/16 20:36:16.25
そのCallCdeclFunctionは圧巻だな。理論上は可能だが実現したのはその人がはじめてだろうな。
まさかメモリー上に展開して機械語を組み込むとは・・・。
29:デフォルトの名無しさん
13/02/16 21:43:52.39
POKEとPEEKだっけか
30:デフォルトの名無しさん
13/02/16 21:44:19.64
それってデータ実行防止にひっかからんのか?
31:デフォルトの名無しさん
13/02/16 21:50:57.52
>>30
スレッドを作成しているから問題無いよ。
システム上はコード領域のページ内で実行される。
つ、初心者が鼻息荒くしてみっともないぜ?はい論破。
32:デフォルトの名無しさん
13/02/16 21:53:03.57
>>30
ここでのキーポイントは VirtualAlloc と CreateThread です。
VirtualAlloc は、通常は大きなサイズのメモリを割り当てるときに使いますが、
コードをコピーして実行することが可能なメモリを割り当てるときにも使えます。
通常のメモリでは「実行」の属性が無いので、場合によってはエラーが発生しますが、
この関数を、PAGE_EXECUTE_READWRITE などの保護モードで呼び出せば欲しいメモリのアドレスがもらえます。
CreateThread は、本来は「スレッド」を作成し、メインのコードを実行している傍ら別の作業を行う、というときなどに使います。
ここでは、単にメモリ上にあるコードを呼び出すという目的にのみ使っています。
これは、VB にはアドレスを指定して関数を呼び出す(Quick BASIC でいう CALL ABSOLUTE 命令)が無いためで、
CreateThread 以外の関数を使うなら EnumWindows 関数など、引数にコールバック関数を指定でき、
且つ他の動作に影響を与えない関数を使用してください。
33:デフォルトの名無しさん
13/02/16 21:55:39.08
>>31
あはは、スレッドの作成とコード実行は関係ないじゃん。論破君もたいしたことないね。あはははは。
34:デフォルトの名無しさん
13/02/16 21:58:53.87
VB6.0でCreateThreadを使うのはかなり怖い。
ミッションクリティカル気分を味わえるな。
35:デフォルトの名無しさん
13/02/16 22:03:22.54
VBで関数ポインタを呼び出す
URLリンク(nienie.com)
これはどうなの?
36:デフォルトの名無しさん
13/02/16 22:08:42.86
>>35
それはデータ実行防止にひっかかるね。アウト。
37:デフォルトの名無しさん
13/02/16 22:23:18.44
Windows 8はハードウェアでDEP強制だから厳しい罠
38:デフォルトの名無しさん
13/02/16 22:24:45.31
Microsoft Visual Basic Version 5.0 で使用する DLL の開発に関する注意
URLリンク(www.microsoft.com)
39:デフォルトの名無しさん
13/02/16 22:27:04.23
関数ポインタと引数リストを引数にして渡せばそれを実行してくれる関数と作ってDLLにすればいいの?
40:デフォルトの名無しさん
13/02/16 22:30:12.66
>>39
日本語でおk
41:デフォルトの名無しさん
13/02/16 22:34:47.61
VBAで関数ポインタを利用する方法
URLリンク(akihitoyamashiro.com)
これはどうなの?
42:デフォルトの名無しさん
13/02/16 22:37:50.20
機械語無しでwsprintfWをVBから呼び出すてるのな
43:デフォルトの名無しさん
13/02/16 22:40:36.33
VBAでの関数ポインタの利用方法 (1/4):CodeZine
URLリンク(codezine.jp)
44:デフォルトの名無しさん
13/02/16 22:41:46.11
>>41
それは元々DLLの関数を呼び出すものなのでDEPは問題無い。
しかもcdeclな関数を呼び出せる。
45:デフォルトの名無しさん
13/02/16 22:44:01.27
機械語というリスキーな操作は無駄だった
46:デフォルトの名無しさん
13/02/16 22:46:41.36
つまりどういうことだってばよ?
47:デフォルトの名無しさん
13/02/16 22:47:45.84
>>43
チクショー!3ページ目からは会員限定かよ!
48:デフォルトの名無しさん
13/02/16 22:50:03.78
URLリンク(akihitoyamashiro.com)
このInputBoxのキャンセル確認方法って結構有名なの?
49:デフォルトの名無しさん
13/02/16 22:51:26.61
>>41
引数をすべてVariant で指定するところが何とも気持ち悪いな
50:デフォルトの名無しさん
13/02/16 22:52:05.53
機械語のほうがスマートだな
51:デフォルトの名無しさん
13/02/16 22:54:05.85
>>50
安定さで言えばVBAの方だな。
52:デフォルトの名無しさん
13/02/16 22:56:54.01
どちらもトリッキーな手法なのには違いない
53:デフォルトの名無しさん
13/02/16 22:58:52.59
しかし最近のこのスレ、真面目にすごくタメになる内容になってないか?
昨今の論破君荒らしの状況に比べるとまるで別スレだわねぇw
54:デフォルトの名無しさん
13/02/16 23:00:39.23
こういうTipsを個人個人が自身のHPで細々と紹介するにとどまってるから普及しない
55:デフォルトの名無しさん
13/02/16 23:02:33.70
>>41使えば動的にDLL関数使い放題ってことか
56:デフォルトの名無しさん
13/02/16 23:05:47.87
>>55
恐れ入ったね。VC++6をDLLをラップするためだけにビルドしていた俺は
いったい何をやっていたのかと情けなくなる。
57:デフォルトの名無しさん
13/02/16 23:10:21.90
VB6よりVBAのほうが普及率高いからVBAからのアプローチで技巧的なコードを探したほうがいいってことか?
58:デフォルトの名無しさん
13/02/16 23:14:00.84
>>57
VB6.0は終わった言語だが、VBAはOfficeで進化しつづけている言語なので
VB6.0のスキルは実は非常に貴重なのさ。
JavaとかC#とか言語の首位を競い合っている連中は
会社がリストラをはじめたら真っ先に処分される連中だが
VBAを押さえておけば社内で尊重される
実は俺がそれでバレンタインにはチョコを17個もらった
関係ない?いやあるんだよこれがね
59:デフォルトの名無しさん
13/02/16 23:16:14.71
>>58
こいつらか?w
じだいおくれの糞言語
スレリンク(tech板)
60:デフォルトの名無しさん
13/02/16 23:18:40.57
有用な情報載せてる個人サイトで一番困るのは突然の閉鎖で参照できなくなることだな
61:デフォルトの名無しさん
13/02/16 23:24:51.96
>>60
俺は有用な情報をみつけたら片っ端からInfoPathに入れてSkyDriveにシンクしてるから
いつ閉鎖されても大丈夫
62:デフォルトの名無しさん
13/02/16 23:26:39.36
個人サイトだろうが企業サイトだろうがストレージサービスだろうが
いつ閉鎖するかも知らんリスクは当然ついてまわる
いいもん見つけたら即ローカルに保存すべし
63:デフォルトの名無しさん
13/02/16 23:27:36.76
>>62
ローカルもいいけどクラウドもねっ♪
64:デフォルトの名無しさん
13/02/16 23:28:51.87
InfoPathのあいまい検索が威力を発揮するな。
65:デフォルトの名無しさん
13/02/17 05:35:45.83
>>41の話って前にも出なかったか?
66:デフォルトの名無しさん
13/02/17 08:27:24.44
この流れだと、TypeLib Informationを出しておかないといけないかな?
他の言語で言えばリフレクション。
クラスが持っているメソッド一覧を取得したり
特定のメソッドを文字列で呼び出したりできる。
さすがにもう随分と情報が減ってしまっているな。
URLリンク(msdn.microsoft.com)
67:デフォルトの名無しさん
13/02/17 08:48:09.62
>>62
つウェブ魚拓 URLリンク(megalodon.jp)
68:デフォルトの名無しさん
13/02/17 21:39:30.09
>特定のメソッドを文字列で呼び出したりできる
CallByNameじゃあかんのか?
69:デフォルトの名無しさん
13/02/17 21:43:50.98
オブジェクトブラウザで非表示のメンバを表示するとstrptrとか隠し関数とか出てくんのな
70:デフォルトの名無しさん
13/02/18 09:01:24.78
>>69
なにを今更・・・。
キミにオススメの隠し関数は
strYourIQ
71:デフォルトの名無しさん
13/02/19 19:11:23.00
w
72:デフォルトの名無しさん
13/02/21 16:57:07.53
>>70
何故にstr?
そして相手に使わせるならYourではなくMyだろ?
君も自分のIQの低さを知っておいた方が良いのでは?
73:デフォルトの名無しさん
13/02/21 17:10:21.38
>>72
よくわからないけど、お前みたいにファビョって噛みついてくる奴を指して Your なんじゃね?
strなのは小数点以下が丸められるのを防ぐためだろう
おそらく 0.0000000001とかだろうからw
74:デフォルトの名無しさん
13/02/21 17:26:34.11
最近、論破君はやられっぱなし
75:デフォルトの名無しさん
13/02/21 18:34:18.10
苦しすぎる言い訳w
76:デフォルトの名無しさん
13/02/21 18:43:51.16
妥当な見解じゃね?
77:デフォルトの名無しさん
13/02/21 21:56:27.25
あっ、はい論破。
78:デフォルトの名無しさん
13/02/21 22:16:35.68
ロンパールームかよ?うつみみどりを呼んで来い!w
79:デフォルトの名無しさん
13/02/21 23:33:07.14
ろんぱり
80:デフォルトの名無しさん
13/02/21 23:42:29.22
はい、ろんぱり。
81:デフォルトの名無しさん
13/02/21 23:51:25.94
ケロンパ、ケロンパ
82:デフォルトの名無しさん
13/02/23 12:50:42.11
Windows Blue リリースと同時にVB6.0 ランタイムサポート終了の噂
出元が広報なところが信憑性の高い理由だと?
83:デフォルトの名無しさん
13/02/23 12:52:09.75
Windows Blue リリースと同時にVB6.0 ランタイムサポート終了の噂
でもと = >>82
84:デフォルトの名無しさん
13/02/23 13:54:50.95
今までに何度同じような未公式発表があっただろうか
85:デフォルトの名無しさん
13/02/23 18:14:39.81
今度は公式発表じゃない?SVから情報っぽいし
86:デフォルトの名無しさん
13/02/23 19:19:20.83
さすがにもう退役でしょう。何の不思議もない。
逆に今までサポートされていた事が脅威だよ。
87:デフォルトの名無しさん
13/02/23 19:23:39.31
VB.NETもそこそこ普及したし、C#も来てるし、もう旧VBのサポを停止すりゃいい
88:デフォルトの名無しさん
13/02/23 19:28:22.12
結局C#は失敗だったね。Javaユーザーからは相手にされなかった。
Javaのオープンソース資産をC#へ移植しドヤ顔で商用化しているオフショアが後を絶たず
日本企業が元はJavaの資産だとは知らずに金払って使っている実態とかね。
業界からはとにかく嫌われ者のC#ですが、VB.netは徐々にシェアを伸ばしていますね。
ここでVB6のサポートが終了すればJavaに迫る勢いになるのは必至どす。
89:デフォルトの名無しさん
13/02/23 19:33:26.61
旧VBでしかできないこと、普通のCやC++でしかできなこと、Javaでしかできなこと、.NET系のVBでしか出来ないこと、C#でしかできないこと、C++でしかできないこと
これらを比較して旧VBのメリット・デメリットを明確にし、旧VBを使うべき事案を絞り見つけだすんだ!
90:デフォルトの名無しさん
13/02/23 19:43:15.12
VB6.0はOLEを使わなければCコンパイラと変わらない実行性能のコードを吐くことが可能。
net系はJITにしようがどうしようがバイナリレベルでは重複コードや冗長コードが満載となる。
でもプログラマーが糞だとどっちも糞言語でしかない。これは何を使っても同じって事。
91:デフォルトの名無しさん
13/02/23 22:24:12.47
そうやってVBしか使えない自分を必死で擁護して虚しくないのかね。
まあたぶんそういう自覚がないから虚しさも感じないんだろうけど。
馬鹿って幸せでいいよね。俺は不幸でも賢いほうがいいけど。
92:デフォルトの名無しさん
13/02/23 22:27:18.84
《参考》 プログラミング言語開発の歴史 Ver1.21
1950||||1960.|||1970.||||1980||1990|||| 2000.||||2010||||
ALGOL→ FORTRAN → BASIC ─→ Sinclair BASIC ──→ DarkBASIC → DarkBASIC Professional [ 独立系 / Windows ]
│││ │ │││
│││ │ ││└──→ MSX-BASIC ──→ 99BASIC → 終了 [ 独立系 / Windows ]
│││ │ │└─→ GW-BASIC ─→ QuickBASIC → 終了 [ Microsoft / DOS ]
│││ │ └─→ CBM-BASIC ─→ AMIGA BASIC → 終了 [ 独立系 / AMIGA ]
│││ │
│││ └─→ FORTRAN77 → FORTRAN90 → FORTRAN95 → 終了 [ 独立系 ]
│││ └─→ FORM → 終了 [ 独立系 / MZ-80K ]
│││
││└───→ PASCAL ──→ C ─→ C++ → VC++ → 終了 [ Microsoft / Windows ]
││ │││││ │ └──→ VC# [ Microsoft / Windows ]
││ │││││ └────→ Objective C [ Apple / iOS / Mac ]
││ │││││
││ ││││└─────→ Visual BASIC → 終了 [ Microsoft / Windows ]
││ ││││ └─→ GLbasic [ 独立系 / マルチプラットフォーム ]
││ ││││
││ │││└─────────→ AppGAME Kit [ 独立系 / マルチプラットフォーム ]
││ │││
││ ││└───→ Delphi → 終了 [ 独立系 / DOS / Windows ]
││ │└───→ TL/1 → 終了 [ 独立系 / MSX ]
││ └───→ PALL → 終了 [ 独立系 / MZ-80K ]
││
│└──→ PL/1 → 終了 [ 独立系 ]
└─────→ VTL → GAME-MZ [ MZ-80K ] ─→ GAME-86 → RVTL [ 独立系 / Windows / Linux ]
93:デフォルトの名無しさん
13/02/23 22:31:24.92
>>91
> 自分を必死で擁護して虚しくないのかね。
> ま あたぶんそういう自覚がないから虚しさも感じないんだろうけど。
> 馬鹿って幸せでいいよね。
実体験に裏づけされた、説得力ある文章だな (w
94:デフォルトの名無しさん
13/02/23 22:36:32.79
>>91
「VBしか使えない自分」ってもしかしたらお前自身の事じゃないのか?
なぜならそうでない俺からするとそういう発想さえ浮かんでこないからだ。
まあ確かにそういう人もこの世の中にはいるかも知れないが
涙拭いてガンバレよ。
95:デフォルトの名無しさん
13/02/23 22:38:09.87
問題はVB6しか使えない人が、なぜかVB.netへ移行できない事なんだがなw
96:デフォルトの名無しさん
13/02/23 22:39:43.00
>>92
VB.netを抜いたのはわざとか?wwwwww
97:デフォルトの名無しさん
13/02/23 22:41:37.65
たとえばStringBuilderもなければコレクションに代表されるライブラリも何もない、
かと言ってポインタ使って生のメモリを操作することもできないVBがCと同じぐらい高速って、
こういうのを必死の擁護と言わなくて何をそういうのかね。
まあ言って分かるようならVBerなわけがないんだけど。
98:デフォルトの名無しさん
13/02/23 22:42:18.10
>>92
Delphi 終了してねーぞゴルァ!
99:デフォルトの名無しさん
13/02/23 22:44:42.58
>>97
そういう問題でもない。
VB6のソフトウェア資産は単純にコンパイラが吐いたものだけでなく
ActiveXやCOM、DLLなどの集合体になって資産と化している。
言語は言語であって資産ではない。StringBuilderの有無など鼻糞に過ぎない。
100:デフォルトの名無しさん
13/02/23 22:46:34.33
>>99
そういう問題じゃないと君が思うのは、君が「そういうのが問題になる」ような
コードを書いたことがないVBerだから。馬鹿じゃないのか。
だいいち自分がVBはC並に高速だと言い出したのじゃないのかよ。
101:デフォルトの名無しさん
13/02/23 22:47:11.12
ポインタ使って生のメモリを操作することができるのがすごいなら
俺はMSDOSでMicrosoft Cコンパイラ ver4.0くらいが一番すごいと思うな。
ver 5になると過度な最適化で変な事になる。
何事もバランスが大切って事ですわ。高速論議は経験の浅い
未熟なプログラマがすることだもんね。
102:デフォルトの名無しさん
13/02/23 22:48:22.34
>>101
あんた60代だろ?www
103:デフォルトの名無しさん
13/02/23 22:50:28.22
>>101
> 何事もバランスが大切って事ですわ。高速論議は経験の浅い
> 未熟なプログラマがすることだもんね。
全力で同意せざるをえない。
104:デフォルトの名無しさん
13/02/23 22:55:20.55
StringBuilder基地概って周期的に沸くよな?
105:デフォルトの名無しさん
13/02/23 22:57:26.71
>>92
C#がC++からの派生とはどうしても考えられない俺がここにイル
106:デフォルトの名無しさん
13/02/23 23:18:29.05
>>105
GLBasicをVBから派生させている段階で
専門学校生の発案であることがわかりそうなもん
107:デフォルトの名無しさん
13/02/23 23:18:34.07
VBってBASICからの派生じゃなくてPASCALからの派生だったのか
108:デフォルトの名無しさん
13/02/23 23:19:50.17
>>107
w
109:デフォルトの名無しさん
13/02/23 23:23:51.95
C#の血統はこんなところだな。
C++ 戸籍上の父親
VB6 代理母
java 卵子提供者
J++ 書類上の卵子提供者
Delphi 精子提供者
ヘルスバーグ 受胎告知
110:デフォルトの名無しさん
13/02/23 23:31:14.31
>>109
良くわかってらっしゃる。熟練プログラマーとお見受けしますた!
111:デフォルトの名無しさん
13/02/23 23:38:58.95
>>109
C++Builder 異母兄弟
112:デフォルトの名無しさん
13/02/24 11:55:26.62
VB.net 一卵性双生児
113:デフォルトの名無しさん
13/02/25 13:54:42.52
>>112
それは違う。同姓同名の赤の他人だろ。
114:デフォルトの名無しさん
13/02/25 19:39:17.92
>>113
109からの流れを見よ
115:デフォルトの名無しさん
13/02/25 20:53:29.88
ゴスリンとヘルスバーグでウケとかタチとかの薄い本見たときはぶっ飛んだぞ。
116:デフォルトの名無しさん
13/02/26 03:42:17.69
GetPrivateProfileStringで全角文字使えないかんじ?
117:デフォルトの名無しさん
13/02/26 03:48:14.84
s = String(20, " ")
r = GetPrivateProfileString(ap,ky,df,s,20,fl)
n = len(s)
としたとき
全角文字が無いとき、例えば abcdefg だったとすると
r=7 n=20 ってなって8文字目がNullコードになってるんだけど
全角文字があるとき、例えば あいう だったとすると
r=6 n=17 ってなって4文字目がNullコードになって
sの変数のサイズが変わっちゃうんだけど
sの消えた3文字分のメモリはどこいっちゃったの?って感じで
これってヤバイの?大丈夫なの?
118:デフォルトの名無しさん
13/02/26 03:49:47.13
sには固定サイズの文字列渡したほうがいいの?
Dim s As String * 20
みたいな
119:デフォルトの名無しさん
13/02/26 06:59:19.24
文字数とバイト数は違うぞ
LenじゃなくてLenB使ってみ
120:デフォルトの名無しさん
13/02/26 10:59:04.17
>>117
全角を使うときは値をダブルクォーテーションで囲えアホが
121:デフォルトの名無しさん
13/02/26 19:59:22.42
>>119
それに何の意味があるのだろうか
Len("abc") > 3
LenB("abc") > 6
Len("あいう") > 3
LenB("あいう") > 6
Len("abあ") > 3
LenB("abあ") > 6
122:デフォルトの名無しさん
13/02/26 20:01:48.31
>>120
ダブルクオーツで囲っても>>117と結果同じだったんだけど・・・
123:デフォルトの名無しさん
13/02/26 20:09:29.55
GetPrivateProfileStringは最初の=以降から文末までを読み込むようで
"あいう"えお"
という二重引用符を間に挟んでやると
文頭と文末の引用符を除いた
あいう"えお
を返してくれたよ
124:デフォルトの名無しさん
13/02/26 20:12:51.87
>キー名に関連付けられている文字列が単一引用符や二重引用符で囲まれている場合、GetPrivateProfileString 関数はこれらの引用符を取り除きます。
単一引用符でも取り除かれるのか
これは意外だ
つかVB6付属のMSDNには文字列書き込むときには引用符でくくれとは書いてないように見えるのだが
125:デフォルトの名無しさん
13/02/26 20:22:42.95
今どきiniとかないわー
xmlにしろよ
126:デフォルトの名無しさん
13/02/26 20:25:59.25
っていうか質問の内容を勘違いしないで
全角文字が取得できないなんて一言も言ってないし
20文字分(40bytes)のメモリを割り当てた変数が
全角含む文字列渡すと全角1文字につき1byte分減って戻ってくるけど
これってメモリ関連のトラブルの発生源になったりしないか聞きたいんだけど
127:デフォルトの名無しさん
13/02/26 20:28:31.08
固定長文字列にしたら元の文字列サイズ分ちゃんと戻ってくるのな
可変長文字列をGetPrivateProfileStringに渡しちゃまずいのか?
128:デフォルトの名無しさん
13/02/26 20:35:35.69
>>125
少量のキーと値の関連付け保持に便利じゃん
レジストリは使いたくないし、xmlだと一部の文字にエスケープとか使って配慮しないといけないし
129:デフォルトの名無しさん
13/02/26 20:58:55.89
>>126
ANSIとUNICODEの変換でそう見えるだけ
UNICODEでの文字数とANSIの文字数(バイト数)は一致しない
130:デフォルトの名無しさん
13/02/26 21:17:03.54
固定長文字列でもちゃんと戻ってくるかと思ったけど違ったわ
"A"で初期化したけど可変長文字列と同様に減って戻ってきてるわ
減った分が32、半角スペースで埋まって戻ってきた
やはり仕様なのか、もしくは全角使うのがまずいのか
GetPrivateProfileStringAじゃなくGetPrivateProfileStringWを使うべきなのか
>>129
APIが全角1文字を半角2文字分としてよこしてVBが2文字分の領域を確保するけど
バイトコードからVBが全角文字だと判断して2文字分を1文字分に減らすってこと?
131:デフォルトの名無しさん
13/02/26 21:25:24.91
あ=82A0
をAPIが 82 と A0 の1バイト文字(半角)2文字分としてVBに渡して
がVBで確保した2文字分の領域4バイト 0000 0000 に上書きされて
0082 00A0 となったところをVBが全角文字と判断して
0082 00A0 → 82A0 という1文字分(2バイト)減らして変数に戻すってこと?
132:デフォルトの名無しさん
13/02/26 21:57:53.94
VBが確保した領域10文字なら10バイト分をAPIに渡して
文字列が「あAA」なら
APIは10バイトの最初2バイトを82、A0で埋めて3バイト目を65、4バイト目を65、5バイト目を0にしてVBに返し
VBは10バイトを1バイトずつ解釈していってunicodeに変換して変数に再割り当てしてるってことなのか?
でもそれだと適当な文字で初期化した固定長文字列の減った部分が半角スペースで初期化されてるのはおかしいし
どうなってんだこれ
133:デフォルトの名無しさん
13/02/26 22:05:41.59
何このバカ?
値が取れればそれでいいだろ?頭使えよ。
134:デフォルトの名無しさん
13/02/26 22:06:22.11
>>129
なんかわけわかんねえレスだなと思ってたらGetPrivateProfileStringの戻り値の話?
戻り値は書き込んだバイト数返すはずだからLenやLenBした値と違うのは当たり前じゃね?
そうじゃなくて変数の割り当てメモリが減ってるって話なんだけど
135:デフォルトの名無しさん
13/02/26 22:10:14.91
GetPrivateProfileString自体がVB6の関数でも何でもないのに戻り値が理不尽だと騒ぐバカ。
相手にする方がどうかしてる。
136:デフォルトの名無しさん
13/02/26 22:12:23.64
だれも戻り値の話なんかしてないだろ
確保しておいた変数のサイズがAPIに渡したら変数のサイズが変わったって言ってんだよ
文字列の長さの話じゃねえし戻り値の話でもない
137:デフォルトの名無しさん
13/02/26 22:14:00.99
>>136
冷静に。
サイズなんか変ってないよ。
BSTRとみなした時の文字数が変っただけ。
138:デフォルトの名無しさん
13/02/26 22:14:30.29
変数の割り当てメモリはどうやって調べた?
文字列の長さ=割り当てメモリじゃねーぞ。
139:デフォルトの名無しさん
13/02/26 22:15:56.02
>>136
なに興奮してんだこのアホ。関係ない戻り値で反応しやがったw
140:デフォルトの名無しさん
13/02/26 22:26:25.87
>>137-138
Dim s As String * 10
s = String(10, "A") ' s="AAAAAAAAAA" Len(s)=10, LenB(s)=20
GetPrivateProfileString(ap,ky,df,s,10,fl)
のコードで
文字列が"AAAA"の場合
s="AAAA0AAAAA" ( 0 はNull文字)
文字列が"あAA"の場合
s="あAA0AAAAA_" ( 0 はNull文字 _ は半角スペース)
固定長文字列を渡した場合、全角含む文字が渡された場合に後部に半角スペースが入るのは何でなの?
これって確保した変数サイズが変わったってことじゃないの?
141:デフォルトの名無しさん
13/02/26 22:29:01.06
>>140
半角スペースだって分かってるならTrimすればええやん 初心者?
142:デフォルトの名無しさん
13/02/26 22:30:12.12
> これって確保した変数サイズが変わったってことじゃないの?
違います。終了。
143:デフォルトの名無しさん
13/02/26 22:33:16.70
>>141
Trimする意味がわからんのだが?
>>142
全部Aで埋めたはずなのに何で後部の文字が半角スペースになるの?APIの仕様に書かれてない処理なんだけど
144:デフォルトの名無しさん
13/02/26 22:33:18.57
>>140
とりあえず2つの問題を区別しよう。
(1) なぜ最後に半角スペースが付くのか
(2) 「変数のサイズ」(確保されたメモリ領域のバイト数)は変ったのか
(1)は本当だと仮定して理由は分からない。
(2)は変ってません。変ったのは、20バイトのメモリ内のデータをUTF-16の文字数と
みなした時の文字数だけ。
145:デフォルトの名無しさん
13/02/26 22:44:53.79
>>144
Lenしたときの文字数が変わるのは可変長文字列を使った>>117のケースで
>>140は固定長文字列を使ってるからAPI通したあともLenした文字数は変わってない
可変長のときなら減った文字数分の半角スペースが固定長文字列のときに後部に埋まってるという話なんだけど
固定長のとき
確保したメモリいっぱいにAの文字を埋めたんだから
APIが前部のデータを上書きしても後部はいじってないのだから
メモリをそのまま引き出したのなら後部はAのままのはずなのに半角スペースが入ってる
これでメモリに異常は起きてないっておかしいんじゃないの?
146:デフォルトの名無しさん
13/02/26 23:07:10.72
つかもういいよ
仕組み知ってる人いなさそうだし
ここで質問した俺が大馬鹿だったてことでいいよ
VBでAPIを使うときVBがAPIとどうやりとりしてるかの知識が足りない俺がバカでした
さよなら
147:デフォルトの名無しさん
13/02/26 23:10:48.17
VB6っていうか、もうWin9x時代のこと大分忘れてるから混乱するな...
冷静に考えるとBSTRはUTF-16だから、ポイントしている領域が同じなら「文字数」が
変るのは確かに変だ。
質問者はひょっとして(今時)Aの付く方のAPIを呼んでるのかね。
VBはこの辺りブラックボックスだから困るんだけど、この場合は、恐らく
関数の呼び出しの前後で.NETでいうマーシャリングが入るんだろう(想像)。
呼出し後に文字数が変るのはこのためか?
148:デフォルトの名無しさん
13/02/27 02:48:18.10
APIではバッファの最大長を指定する
戻りでヌルターミネートされた先の領域なんて保障されてないだろ
API呼び出し後にANSI-UNICODEの変換が入ってるから
その変換時に(VBとしての)変数のサイズが変わっても不思議も問題もない
149:デフォルトの名無しさん
13/02/27 03:02:32.75
VB6からWのほうって呼び出せるのか?
150:デフォルトの名無しさん
13/02/27 03:05:23.37
呼べることは呼べる
でもA呼び出すよりメンドクセ
151:デフォルトの名無しさん
13/02/27 04:26:45.46
呼び出せんのか
知らなかったわ
どうやんの?
152:デフォルトの名無しさん
13/02/27 04:46:20.16
呼び出すだけなら普通に〜WまでDeclareして呼ぶだけ
文字列渡したらどうなるかは知らん
153:デフォルトの名無しさん
13/02/27 05:00:16.69
当然ながらメンドクセと言ってる部分のことを尋ねているのだが
154:デフォルトの名無しさん
13/02/27 05:03:47.90
Visual Basicに関するメモ
URLリンク(homepage3.nifty.com)
APIとの文字列のやりとり(ANSI vs UNICODE変換)
を嫁
155:デフォルトの名無しさん
13/02/27 12:27:49.61
declare function GetPrivateProfileStringW lib "kernel32" ( _
byval ap as long, byval ky as long, byval df as long, byval s as long, byval l as long, byval fl as long) as long
dim s as string
s = string(10, vbnullchar)
l = GetPrivateProfileStringW(strptr(ap), strptr(ky), strptr(df), strptr(s), 10, strptr(fl))
s = left(s, l)
156:デフォルトの名無しさん
13/02/27 16:02:58.71
正解!
157:デフォルトの名無しさん
13/02/27 21:39:47.58
%TEMP%フォルダに
DF〜.tmpというゴミファイルが大量にたまってると思ったら
旧VBのせいかよ!
158:デフォルトの名無しさん
13/02/27 21:42:33.26
いつの間にかVB.netをVBって呼ぶようになったのね。
VBできますか?って言われたから、てっきりVB6.0の事かと思って「ハイ!」と答えたら
あとでVB.netだったと分かりさあ大変。納期は3週間しかないけど対応できるだろうか?
バカだなおれorz
159:デフォルトの名無しさん
13/02/27 21:46:01.33
アイコン使ってる旧VB製のやつが原因か
まぁIE9でも作られてるが・・・
160:デフォルトの名無しさん
13/02/27 21:53:10.31
アイコンなんて使ってないけど?
161:デフォルトの名無しさん
13/02/28 21:41:42.10
変数のポインタアドレス渡すとか何か怖いな
162:デフォルトの名無しさん
13/02/28 21:43:47.88
>>155
ていうかこれ書き込まれる文字コードはunicodeってわけじゃないのな
引数としてunicodeが渡せるってだけなのな
どっちみちファイルにANSIで書き込まれるのならAとWどっちを使っても同じやん旧VBからは
163:デフォルトの名無しさん
13/02/28 21:57:08.78
INIファイルの先頭にBOMがあるかないかで動作が変わったような記憶が。
違ってたらごめん。
164:デフォルトの名無しさん
13/02/28 22:13:13.73
>>161
ポインタアドレスってなんだよ?ポインタ自体がアドレスだろうが?
それともポインタのポインタか?そんなもん渡してませんが何か?
これだからVB6オンリープログラマは怖いわ・・・。
165:デフォルトの名無しさん
13/02/28 22:24:36.72
ポインタってアドレスを指す変数のことじゃなかったのか・・・勉強になるなこのスレ
166:デフォルトの名無しさん
13/02/28 22:43:02.98
おとなしくxmlを使えばいいのに
167:デフォルトの名無しさん
13/02/28 23:04:23.74
>>165
いつからポインタが変数になったんだよ?w
168:デフォルトの名無しさん
13/02/28 23:06:05.49
配列なら変数だな
169:デフォルトの名無しさん
13/02/28 23:18:06.38
普通の変数は値を保存しているけど
ポインタは変数の値を保存しているメモリのアドレスを保存している変数
170:デフォルトの名無しさん
13/02/28 23:21:17.55
ポインタは変数ではないよ。そんな風に教えたのは一体どこの専門学校だよ?大原か?
171:デフォルトの名無しさん
13/02/28 23:23:23.90
>>170
ググるとポインタは変数ですと説明しているサイトが山のようにひっかかるからだろ?
アホの仲間入りをさせておけばええやんw
172:デフォルトの名無しさん
13/02/28 23:24:10.45
語義を考えれば分かると思うが、ポインタとはもともとは左辺値が入る変数やレジスタのこと。
左辺値そのもののこともポインタと言ったりするが、それは派生的用法だろう。
173:デフォルトの名無しさん
13/02/28 23:24:30.44
>>169
ポインタ (プログラミング) - Wikipedia
Wikipedia項目リンク(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
174:デフォルトの名無しさん
13/02/28 23:26:02.52
変数のように扱えるから、初心者はアドレス専用変数と考えると分かりやすいからでしょう。
言語仕様は関係ないでしょうから。
175:デフォルトの名無しさん
13/02/28 23:28:59.80
>>172
>ポインタとはもともとは左辺値が入る変数やレジスタのこと。
一体どんな言語を前提として言ってるのかね?アセンブラかい?
だったらWORD PTRとかQWORD PTRとかを変数と呼ぶのかい?
少なくともC言語では言語仕様上ポインタは変数ではないぞ。
変数と同じように値を代入する事はできるがな。
176:デフォルトの名無しさん
13/02/28 23:30:23.30
VB6でポインタを語っている時点で終わってる訳だが?
177:デフォルトの名無しさん
13/02/28 23:31:46.23
前スレに関数ポインタをVBから実行するテクがあったな
178:デフォルトの名無しさん
13/02/28 23:33:29.67
StrPtrとかなんで隠し関数なんだ?
179:デフォルトの名無しさん
13/02/28 23:35:23.62
>>175
だから、君が本来の意味と派生的な意味の区別がついてないだけ。
馬鹿はこれだからな。人が言ってるそばからまったく。
180:デフォルトの名無しさん
13/02/28 23:35:36.60
AddressOf 演算子を変数だと言い出す奴が出現しそうだなw
181:デフォルトの名無しさん
13/02/28 23:35:47.31
仕様と実装は別じゃね
Cコンパイラがポインタを変数のように扱うかもしれんだろ
182:デフォルトの名無しさん
13/02/28 23:36:37.23
本来の意味と派生的な意味をごっちゃにしてる奴が話を混乱させているだけだろ?
183:デフォルトの名無しさん
13/02/28 23:42:34.41
「ポインタ変数」と書いてるサイト大杉ワロタ
184:デフォルトの名無しさん
13/02/28 23:50:09.01
>>183
Cの場合はポインタは型。
つまり「ポインタ変数」はポインタ型の変数と言う意味。
だから何もおかしくない。
185:デフォルトの名無しさん
13/02/28 23:51:12.24
この辺り、ポインタ変数もムーミン村とかバカボンパパと同じ系統のネーミングだなw
186:デフォルトの名無しさん
13/02/28 23:55:05.08
関数へのポインタ = 関数ポインタ
変数へのポインタ = (変数)ポインタ
ポインタを入れる変数 = ポインタ変数
関数へのポインタ = 関数ポインタ
関数へのポインタを入れる変数 = 関数ポインタ変数
ここまでいえば、ポインタとポインタ変数の
違いぐらいわかるだろ。
187:デフォルトの名無しさん
13/02/28 23:58:07.54
WORD pointer ← WORD型変数
↑
WORD型
WORD* pointer ← WORDポインタ型変数
↑
WORDポインタ型
188:デフォルトの名無しさん
13/03/01 00:00:57.25
WORD* pointer
↑
WORDポインタ型
int* pointer
↑
intポインタ型
void* pointer
↑
voidポインタ型
?* pointer
↑
型名を省略して、ポインタ型
そしてpointerはポインタ型変数
変数の中に入っている値 ・・・ ポインタ
189:デフォルトの名無しさん
13/03/01 00:03:24.02
>>186
まだ言ってるのか。
概念としては、アドレスを入れる入れ物としてのポインタがあくまで先。
Cには型の概念があるから、ポインタ変数の型のことをポインタと呼ぶことにした、
という順番。まさにムームン村。
190:デフォルトの名無しさん
13/03/01 00:04:59.38
> ポインタ変数の型のことをポインタと呼ぶことにした、
してない。
ポインタは変数の中に入っている値。
ポインタと
ポインタ型と
ポインタ変数は
それぞれ別
数値と
数値型と
数値型変数
といえば理解できるだろ?
191:デフォルトの名無しさん
13/03/01 00:06:20.94
だから語義を考えろって。生きてるうちに少しは頭使えよ。
pointer = point + er。
192:デフォルトの名無しさん
13/03/01 00:06:50.89
それで?
193:デフォルトの名無しさん
13/03/01 00:08:11.73
位置を支持するもの(変数)だからpointerって言うんだよ。
位置だけならただのpointじゃねえか。
こんな簡単な話がわからない奴がいるんだからな。
194:デフォルトの名無しさん
13/03/01 00:08:23.58
おまえら旧VBでポインタ扱うことあるの?ならこの話を続けてもいいよ
195:デフォルトの名無しさん
13/03/01 00:10:33.15
URLリンク(wiki.answers.com)
What is a pointer variable?
A pointer variable is a variable that contains the memory
location of another variable or an array (or anything else in memory).
Effectively, it points to another memory location.
196:デフォルトの名無しさん
13/03/01 00:11:31.11
pointerって黒板指す奴だな
197:デフォルトの名無しさん
13/03/01 00:15:49.97
#define BASE 0xA000
WORD *pointer = BASE ← これ(BASE)が位置(ポイント)
BASEがポイントであり、
pointerに入っている値(=0xA000)は
ポイントを指し示すものだから、ポインタ
198:デフォルトの名無しさん
13/03/01 00:17:28.10
>>197
馬鹿だろお前
199:デフォルトの名無しさん
13/03/01 00:19:59.89
反論できなきゃ、お前が馬鹿ってことになる。
口を出したのなら、最期までやらなきゃ自滅だよ。
200:デフォルトの名無しさん
13/03/01 00:20:03.06
defineってマクロじゃん
テキスト的にその文字列を置き換えるってだけのものなのに
201:デフォルトの名無しさん
13/03/01 00:20:59.42
東京タワーの場所 = 位置
その位置を表す数値=ポインター
202:デフォルトの名無しさん
13/03/01 00:27:28.17
2つ3つの意味を持つ言葉ってプログラミング言語にはつきものなのかな
プロセスとかパイプとか
203:デフォルトの名無しさん
13/03/01 00:27:36.24
WORD point;
WORD *pointer = &point;
204:デフォルトの名無しさん
13/03/01 00:28:33.59
>>199
反論てw
>>197に反論が必要だと思ってるのか。
厚顔無恥ってのはすごいことだね。
2行目で自分で「ポイント」だと言ってる同じ0xA000という値が、
5行目では「ポイントを指し示すもの」になってることに何も疑問を感じないのかよ。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4538日前に更新/211 KB
担当:undef