VBプログラマ質問スレ(6.0以前) Part41

このエントリーをはてなブックマークに追加
928デフォルトの名無しさん:2005/05/19(木) 23:10:13
VBだけに、あると思った。
929デフォルトの名無しさん:2005/05/19(木) 23:10:55
928のVBの印象は間違っていたようだ。
930デフォルトの名無しさん:2005/05/19(木) 23:31:59
VBの壁
931デフォルトの名無しさん:2005/05/20(金) 00:08:57
EXEを作れるEXEはどうやって作ればいいのですか?
932デフォルトの名無しさん:2005/05/20(金) 00:12:28
>>931
PEフォーマットの形式で、ヘッダなどをつけて
機械語コードを埋め込んだバイナリファイルを
作成するEXEを作ればいいだけ。
具体的にはスレ違い。
933デフォルトの名無しさん:2005/05/20(金) 00:12:41
>>931
コンパイラの勉強とかPEフォーマットやインテルの仕様書見ろ
934921:2005/05/20(金) 01:02:07
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
myIE.Navigate2 URL, , , , "Authorization: Basic " & strAccount & vbCrLf
End Sub

BASIC認証の件なんですが、このコードで毎回ヘッダを送信するようにしたところ
Navigateする度に自身のイベント呼び出してしまう無限ループに陥りました・・・orz

VBAでいうApplication.EnableEvents = False
のようなイベントを無効にする事って出来ないんですかね?
935デフォルトの名無しさん:2005/05/20(金) 01:03:29
>922
つ[RegExp]
936デフォルトの名無しさん:2005/05/20(金) 01:39:33
>>934
よく知らんけど、こことか見るとフラグで制御しているみたいね。
http://www.vbip.com/forum/topic.asp?id=6082
937デフォルトの名無しさん:2005/05/20(金) 02:09:32
>>936
おー、自分の求めていたものが出来ました!

ただこのままでは対象をファイルに保存するで、ダウンロードする時に
パスワードを要求されてしまう・・・orz

WebBrowser1_DownloadBegin()
これでは引数にURLがないし、どうしたらいいのでしょう?
APIでBASIC認証ダイアログのハンドルを取得して、SendMessageできたらなぁ・・・
938デフォルトの名無しさん:2005/05/20(金) 03:01:34
>>937
URLにパスワードを含めるのは?
939デフォルトの名無しさん:2005/05/20(金) 07:41:23
>>937
ファイルをダウンロードするところを・・・Inetだっけ?
とかWinSockとかでやったら?

> APIでBASIC認証ダイアログのハンドルを取得して、SendMessageできたらなぁ・・・
それと同じようにWebBrowserでパスワードをSendMessageで・・・って
やったことあるけどねw
やばいサイト用ツールなのでソースを出すわけにはいかないがw
940デフォルトの名無しさん:2005/05/20(金) 11:45:52
>>938
セキュリティの点で問題があるので、去年MSがIEのパッチで使えなくして、
サイト側も使えないところが多くなったような。
941デフォルトの名無しさん:2005/05/20(金) 14:44:10
VB6.0上のMsgBox上の表現で右詰にする方法はありませんか???
942891:2005/05/20(金) 17:14:23
エラーはでなくなったんだけど
配列を渡す先のdllでめちゃめちゃな値が渡されてる・・・
VBでは配列の値が1で送ったはずなのにdll先(C++)では1242316って値になってるし???
どういうことなんでしょうか?
943デフォルトの名無しさん:2005/05/20(金) 17:21:33
>>942
DLL(C++) で VB の配列を受け取る場合は VARIANT(C++)型を使え。
944891:2005/05/20(金) 17:48:18
>>943
C++でVariantって定義したらシンタックスエラーっていわれて怒られた(´・ω・`)
どういう風に宣言したらいいのでしょうか?
945デフォルトの名無しさん:2005/05/20(金) 18:07:31
>>944
VARIANTだ。大文字小文字は区別される。それでもだめなら<OAIdl.h>をインクルードしろ。

でも1次元の配列ならVARIANTにしなくてもできるはず。
DLLとVB側でどんな宣言をした?
946デフォルトの名無しさん:2005/05/20(金) 20:11:14
おしえてください。VBで通常参照設定をしているDLLを
CreateObjectでセットする事ってできるのでしょうヵ?
947デフォルトの名無しさん:2005/05/20(金) 20:23:58
できる。
948891:2005/05/20(金) 20:28:40
>>945
VB側
Dim a(10) as Long

For i = 0 to 9
a( i ) = i + 1
Next
kotae = siki ( a() , b , c)


Declare Function siki Lib "test.dll" ( x() As Long , ByVal y As Long , ByVal z As Long) As Double

C++側

TEST_API double __stdcall siki (int x[] , int y , int z )

こんな感じです
949デフォルトの名無しさん:2005/05/20(金) 20:38:19
>>947
方法を教えていただきたいのですが、よろしくお願いします。
イメージとしては
dim aaa as object

set aaa = CreateObject("abc.dll")
を想定してたのですがコンパイルエラーになります。
950デフォルトの名無しさん:2005/05/20(金) 20:42:09
DLLはクラス名じゃないから当然。
参照設定しているDLLに入っているクラスを指定しろ。
951デフォルトの名無しさん:2005/05/20(金) 20:48:01
>>950
回答ありがとうございます。
クラスというとおそらくはDLLを構成しているクラスモジュールだとおもうのですが
あっていますか?

ActiveXコンポーネントはオブジェクトを作成できませんのエラーがでます。
revsvrは実行しています。
952デフォルトの名無しさん:2005/05/20(金) 20:49:39
クリはクラスだろう。オレがよく使うのは
CreateObject("Scripting.FileSystemObject")
CreateObject("OracleInProcServer.XOraSession")

ということは?
953デフォルトの名無しさん:2005/05/20(金) 20:50:19
あっとわかりました。!!
DLL名.クラス名 で正解ですね??
954デフォルトの名無しさん:2005/05/20(金) 21:04:55
DLL名.じゃねーってw
ActiveX DLLのオブジェクト名.クラス名だ。
ちょっと違った気もするがまあいいか。
955デフォルトの名無しさん:2005/05/20(金) 21:06:12
abcというオブジェクト名の
dllというクラス名なら>>949で正解!
956デフォルトの名無しさん:2005/05/20(金) 21:11:16
了解しました先生方!!
うまくDLLの関数がよびだされました。
オブジェクト名が正だったんですね。
分かり易い説明ありがとうございました。
957デフォルトの名無しさん:2005/05/20(金) 22:16:10
すみません。文字列の比較についてなんですが、
VBでは文字列の比較に「=」を使用してもいいんでしょうか?
それとも必ずstrcompを使うわないといけないんでしょうか?
958デフォルトの名無しさん:2005/05/20(金) 22:25:18
>>948
VBのDeclareでのx() As Longに対応するC++の型はSAFEARRAY **になる。
x As Longにしてsiki(a(0))と呼べばC++ではint []として受け取れる。(数値型限定)

http://support.microsoft.com/?scid=kb;ja;410837#XSLTH3143121122120121120120
959デフォルトの名無しさん:2005/05/20(金) 23:52:54
線分OAのOを中心に45度のところに線を描きたいのですが、
角度を用いて線を描くときはどうやって表せばいいのでしょうか?
960デフォルトの名無しさん:2005/05/21(土) 00:06:34
>>959
線分を引くにはLineメソッド。(PictureBoxかFormっしょ?)
2点の座標がいる訳だが点Oの座標ともう一点は計算で楽勝でしょ。
(45度なら計算するまでもないが、
 任意角度でもSin/Cos関数を使って中学生にでもできる)
961デフォルトの名無しさん:2005/05/21(土) 00:06:59
>>959
計算したら出るだろ
962959:2005/05/21(土) 00:17:44
1つの枝から3本の枝が出て、それぞれからまた3本の枝が出て・・・
っと続いていく図形を作りたいのですが、それも計算で表すことでできるでしょうか?
963デフォルトの名無しさん:2005/05/21(土) 00:21:14
>>957
完全一致の比較は「=」でいい。
TextCompareモードとかで比較する時にStrCompを使うと便利。
964デフォルトの名無しさん:2005/05/21(土) 00:25:20
>>962
いつも45度ずつなら三角関数は必要ないなあ。
簡単な法則で次の座標値を計算できるし。
965959:2005/05/21(土) 00:33:58
簡単な法則とはどのようなものでしょうか。
966デフォルトの名無しさん:2005/05/21(土) 00:35:30
本当にわかって言ってるのか>>960とか>>964は。
まあ確かに高校生レベルの数学(中学生はさすがに言いすぎ)だが、
そんなに簡単とも思えないが。

結構面倒くさいぞ。
967966:2005/05/21(土) 00:40:58
>>965
俺なら局座標でもユーグリッド座標でも定義できる
二次元ベクトルのクラスをつくるね。

局座標をxy座標に変換するのは出来るでしょ?
それが出来ればあとはベクトルの足し算すればいいと思う。
968デフォルトの名無しさん:2005/05/21(土) 00:43:56
あ極座標ね
969959:2005/05/21(土) 00:46:56
>>966
なるほど。ありがとうございます。

ところで質問ばかりで申し訳ありませんが、
極座標はVisual Basicでどのようにあらわすのでしょうか?
970デフォルトの名無しさん:2005/05/21(土) 00:48:00
>>967
お前は字も読めない小学生か?
ここは数学板ではないぞ。スレ名をよく見てみろ。

>>960みたいにコードで答えなきゃ意味がない。
971デフォルトの名無しさん:2005/05/21(土) 00:52:28
>>970
君は「サンプルコードがなければ何もできない、いつもサンプルをコピペして
コーディングしている自分」を他人に投影し過ぎです。

普通の知能レベルの人は「考え方」さえ聞けば必要十分なのだよボクちゃん。
972デフォルトの名無しさん:2005/05/21(土) 01:01:39
>>969
Visual Basicの組み込みの機能としては、極座標というデータ型はない。
極座標って要xyの直交座標の代わりにはrとθで表現する座標系だってことは
わかるよね?

だったら、その通りコーディングするだけだと思うけど。。
973デフォルトの名無しさん:2005/05/21(土) 01:20:10
荒らしは華麗にスルーしましょう。
974957:2005/05/21(土) 01:26:27
>>963
ありがとうございました。
Cだとかだと関数使わないといけなかったですよね?
演算子による比較だと同じメモリアドレスでないと真にならないとか。
それで気になって質問してみました。
975デフォルトの名無しさん:2005/05/21(土) 01:29:36
>>971
っ鏡
976デフォルトの名無しさん:2005/05/21(土) 02:25:14
977891
>>958
サンクス
そのsiki(a(0))の方法で無事読み込めたよ!!!
そうか〜配列のしょっぱなのアドレスをC++へ渡せばいいだけだったんだね
本当に助かりますた(`・ω・´)シャキーン