はじめまして、Doryaです。
早速ですが、VBでACTIVEX.DLLを作成してローカルのドライブにおいてEXEプログラムより参照設定しています。
このEXEをコンパイルして、他のPCへ移しましたがプログラムが、起動しませんでした。他のPCも、コンパイルしたPCと同じようにACTIVEX.DLLを、デシトリビューションウイザードで作り登録していました。
どうも、参照設定がうまくできてないような気がします。ためしに、プログラム(EXE)をデシトリビューションウイザードを使ってインストールしましたら、問題なくうごきました。これって、DLLとEXEを別々にコピーして、配布することはできないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ActiveXを使用したDLLを作っているのだとしたら、


Regsvr32.exeで登録しないと参照してもみつからない
というエラーで動作しないと思いますよ。

どうしても別々に配布したいのであれば、レジストリへの
登録の仕方も一緒に書かないといけないでしょう。

ではでは☆

この回答への補足

早速の回答有り難うございます。
ご指摘のとおり、REGSVR32.EXEを使って、EXEを作成した端末と同じ構造(たとえばD:\DLL)にDLLをコピーし、レジストリに登録しました。しかし、EXEを実行しましたが、動きませんでした。VBPを開いてみるとやはり、参照不可になっていて、(参照設定の)チェックを外して、再度参照設定をし直すと動きました。
DLLの登録する場所(Winnt\System32とか?)、またはREGSVR32.EXEの記述の方法がまずいのでしょうか?
それから、何回も登録したため、参照設定の参照可能なライブラリファイルがたくさん出てきて、regsvr32.exe -u
コマンドでも削除できない状態です。これも、何か関係しているのでしょうか?

補足日時:2001/05/31 09:36
    • good
    • 0

c:\windows\systemにDllをコピーしたら動きませんか?


コンパイルしたPCはレジストリに参照先を覚えているようなきがします。
レジストリに登録されていないとsystemを見に行くような。
推測ですいません
    • good
    • 0
この回答へのお礼

ご指導有り難うござます。
結局、再インストールしまして、動くようになりました。
やはり、何回もDLLを作り直して参照設定がうまくできて
いなかったようです。
根本的な解決ではありませんが・・・。
いろいろ有り難うございました。

お礼日時:2001/06/13 08:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qウェブページを参照ってどういう意味?

ウェブページを参照ってどういう意味?

Aベストアンサー

「インターネットのWebサイトにある該当ページを参照してください」という意味です。

例えば「ななつんさんが投稿された『ウェブページを参照ってどういう意味?』というウェブページを参照してください」と言ったら以下に示します「教えて!goo」のWebサイトにある以下のページを参照してくださいという意味です。

https://oshiete.goo.ne.jp/qa/9533888.html

参考まで。

QActiveX DLL と ActiveXコントロールの違い

VB6で開発をしています。
複数のEXEファイルを使用するシステムです。
各EXEファイルの共通のモジュールをライブラリ化しようと思っています。

これは [ActiveX DLL] 又は、[ActiveXコントロール] のどちらでも実現できると思うんですが、どちらで作成した方が良いのでしょうか?

それぞれのメリット、デミリットを教えて下さい。

Aベストアンサー

混乱させますw

私も最近まで知らなかったのですが、任意のタイミングでOCXもインスタンスの生成が可能みたいです。
WinSockを張らずにPGを書き上げ、WinSockコントロールを使用する方法がわたしの利用しているメーリングリストに出ておりました。
その結末は、「あまり公開はされてはいないけど、ほとんどのコントロールはEXEにしてからOCXとして取り込むことができる」ということです。


ActiveXDLLも参照設定をしなければ、DLLバージョンが違っても大丈夫です。
ただし宣言が
As HogeHoge←(DLLの定義)を
As Object
として、CreateObject("DLL定義")のように行うと、引数が一緒ならEXEはリコンパイルしないでもいいです。実例として、エクセルを参照設定して[as Excel]と宣言していたら、その参照設定に対応したExcelしか操作できませんが、[As Object]と[CreateObject("Excel.Application")]とすると、EXCEL95~XPまで扱えます。
不便なのは、タイプライブラリが未設定になるので、Excelの各プロパティ/メソッドを知らないといけないし、Excel固有の定数が宣言もされてないので、自分で定数値を調べなければいけません。でもバージョンの違いを気にしないでいけるのは、非常に便利です。


速さのことを言ったら、当然DLLが早いです。
OCXはプロパティにRight/Leftなどを持っています。変えて言うと実体を持っていると言うことです。非表示にしていても実体をもっています。DLLはインスタンスは生成されますが、OCXだって生成されるので、表示しないで使用するなら、OCXの意味があまりありません。


んで、私(個人)の考えとしては、、、
※オリジナルボタンなどの、画面上必要ならOCX
  理由:画面に必要だから
※画面に表示を行う必要がなくても、配布する気ならOCX
  理由:配布先のユーザが扱いやすい
※そうじゃなければDLL
  理由:OCXにする理由が見つからないから


余談です。
私はいつもCommonコントロールは使用しません。
  理由:簡単なAPIでも実現できるのに、機能が少ないCommonコントロールを追加して、EXEの容量を大きくしたくないから

混乱させますw

私も最近まで知らなかったのですが、任意のタイミングでOCXもインスタンスの生成が可能みたいです。
WinSockを張らずにPGを書き上げ、WinSockコントロールを使用する方法がわたしの利用しているメーリングリストに出ておりました。
その結末は、「あまり公開はされてはいないけど、ほとんどのコントロールはEXEにしてからOCXとして取り込むことができる」ということです。


ActiveXDLLも参照設定をしなければ、DLLバージョンが違っても大丈夫です。
ただし宣言が
As HogeHoge←(DLLの定...続きを読む

Qエクセルの絶対参照で$D6やD$6はどんな意味なのか。そして、どんな場合に使いますか。

唐突ですがエクセルの絶対参照で普通は$D$6のように使いますがF4を押し続けたら$D6やD$6になりました。

この$D6やD$6はどんな意味なのか。またどんな場合に使うのかを知りたいです。

お手数ですが教えて下さい。

お願いします。

Aベストアンサー

$D$6 D列6行を絶対参照
$D6 D列を絶対参照
D$6 6行を絶対参照

たとえば、A6 のセルに上記を参照する式を入力して、A6をB6とA7にコピー貼り付けした場合の、B6,A7の参照式がどうなるか、とやってみるとわかり易いでしょう。

A6 =$D$6 B6 =$D$6 A7 =$D$6
A6 =$D6 B6 =$D6 A7 =$D7
A6 =D$6 B6 =E$6 A7 =D$6

どんな場合に使うか…
う~ん、参照式をコピーする時に絶対参照したい部分と可変部分を便利に使いたい時の使い分け、ですかねぇ。

Q異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

結論から質問内容を言うと、

異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

具体的には、
A.exeと、B.exeの両方で参照している
Common.dllに定義しているクラスの
staticなフィールドは、A.exe実行時のメモリ領域と、
B.exe実行時のメモリ領域と、完全に別で独立状態
であることを前提にしているのですが。。。


これは本当に真なのかを確認させてください。
あたりまえじゃねーかバカ野郎っていわれそうですが
ちょっと、そこ間違えると後で、痛いので、
念押しで再確認お願いします。


<質問に至った経緯>
Delphi3.0からVB.NET2003(2005未対応のコンポーネントを使用する諸事情があったから)
にシステム移行の案件があり、
工数を避けません。現在、開発方針を検討中で調査していると、デルファイプロジェクトAと、
デルファイプロジェクトBで、Commonという名前の
フォルダにあるソースを共有していて、
A.exeとB.exeを作っていました。
特に共通部分をdllにしていたりしていませんが。
VB.NETでそれは、きついので、
Commonにあるソースだけ、集めたCommon.dllを作る
プロジェクトを作り、Aプロジェクト、BプロジェクトがCommon.dllを参照するやり方を検討しました。
Common.dllには、たくさんグローバルな変数が定義されていたので、
グローバルなデータは、もともとのソースファイルごとにクラスを
作ってそこにスタティックなフィールドとして宣言していく。それをAや、Bのプロジェクトのソースで
使うが、もともと、デルファイがexeが完全にわかれていたので、VBでdllに分けた結果、実行時にメモリも
共有されると、意図した動きをしてくれない懸念が
あるので、それはないのかどうかを確認したかった。
###########################################


以上です。

結論から質問内容を言うと、

異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?

具体的には、
A.exeと、B.exeの両方で参照している
Common.dllに定義しているクラスの
staticなフィールドは、A.exe実行時のメモリ領域と、
B.exe実行時のメモリ領域と、完全に別で独立状態
であることを前提にしているのですが。。。


これは本当に真なのかを確認させてください。
あたりまえじゃねーかバカ野郎っていわれそうですが
ちょっと、そこ間違えると後で、痛いので、
念押しで...続きを読む

Aベストアンサー

>異なるexeから参照しているdllの変数は実行時のメモリ領域として独立的か?
独立です

Qエアロバイク(☆注、下記参照)の電磁ブレーキとマグネット式は同じ意味で

エアロバイク(☆注、下記参照)の電磁ブレーキとマグネット式は同じ意味ですか?

☆室内固定式自転車のことです。ウォークマンのように一般名詞化していないので
すが、便宜上、エアロバイク=室内固定式自転車 とさせていただきます。

Aベストアンサー

同じではありません、これは負荷装置の違いです。
負荷装置は「ベルト式」、「マグネット式」、「電磁ブレーキ式」とありまして、ベルト式は安価ですが故障しやすく、マグネット式は平均的で、電磁ブレーキ式は精度が高くスムーズなペダリングが出来ますが価格は高額です、フィットネスクラブではほとんどが電磁ブレーキ式を採用してます。

QActiveXコントロールでフォームを参照するには?

VB6SP5を使用してActiveXコントロールを勉強中です。

ActiveXコントロールを作成(OCX化)して、そのコントロールを別のプロジェクトのフォームで使用しようと思っています。
このコントロールの機能は、使用するフォーム上の「ラベル」や「テキストBOX」の情報(Caption、サイズ、位置、色 etc...)を取得して、いろいろと処理を行いたいのですが、取得方法がわかりません。

一応、次のようにコントロールのメソッドの引数でフォームを受け取ろうとしたのですが、下記のコンパイルエラーが出てダメでした。

 Public Sub ABC( ByRef frmMain As Form )
   :
 End Sub

--- コンパイルエラー!! -------------------------------------------
 "プライベート オブジェクトモジュールを、
 パブリック オブジェクトモジュール内で、
 パブリック プロシージャの引数または戻り値、
 パブリック データメンバ、またはパブリックのユーザー定義型のフィールドとして、
 使用することはできません。"
------------------------------------------------------------------

ところが、"As Form" を "As Object" にすると、上手くいきました。

 Public Sub ABC( ByRef frmMain As Object )
   :
 End Sub

この違いは何なんでしょうか?
この使い方は正しいのでしょうか?
もし、別の方法があれば、教えて下さい。

VB6SP5を使用してActiveXコントロールを勉強中です。

ActiveXコントロールを作成(OCX化)して、そのコントロールを別のプロジェクトのフォームで使用しようと思っています。
このコントロールの機能は、使用するフォーム上の「ラベル」や「テキストBOX」の情報(Caption、サイズ、位置、色 etc...)を取得して、いろいろと処理を行いたいのですが、取得方法がわかりません。

一応、次のようにコントロールのメソッドの引数でフォームを受け取ろうとしたのですが、下記のコンパイルエラーが出てダメでした。

...続きを読む

Aベストアンサー

あにぃーの反論、さすがにレアな情報ひっぱってきますねー
かなりヘビーっす。

まーそれはそれとして、、、

http://www.microsoft.com/japan/developer/library/vbenlr98/vamsgCantPassPrivateObject.htm
の内容は以前に確認しております。

その中で
>作成したプライベート クラスをクライアントへ渡す必要がある場合は、その Instancing プロパティを Private 以外の値に設定してください。
とあります。
要は回避方法があるということです。

しかもObject型で受けることにより、セットされるタイミングでその使用される領域とクラス名で、VB側がフォームやコントロール類であることを理解します。
受けることができないのであれば、セットすることすらできません。

ましてやオリジナルのコントロールであるならば、なおの事問題はありません。

私自身、張るだけで各コントロールのサイズを変更するActiveXを公開した事があります。
特別な操作を出さない限り、URLの様なエラーは出ないと思います。
(だって今までそれで出たことないから。。。)

それでObject変数にセットしてできることは、全てSendMessage系の事なので結果は同じです。


もしAs Objectで宣言した変数にセットして症状が出た場合は、
>ウインドウハンドル、FindWindow(Ex), SendMessage 辺りでやるしかないでは
これだけではなく、グローバルメモリ領域に本体の方が書き込んで、それを利用する必要があります。

だから出なければ結果オーライ。
と言う発言をしました。←言い訳っぽい?

あにぃーの反論、さすがにレアな情報ひっぱってきますねー
かなりヘビーっす。

まーそれはそれとして、、、

http://www.microsoft.com/japan/developer/library/vbenlr98/vamsgCantPassPrivateObject.htm
の内容は以前に確認しております。

その中で
>作成したプライベート クラスをクライアントへ渡す必要がある場合は、その Instancing プロパティを Private 以外の値に設定してください。
とあります。
要は回避方法があるということです。

しかもObject型で受けることにより、セットされる...続きを読む

Q「参照元が変です。」とはどういう意味ですか?

名付け支援「いいなまえねっと」というサイトを利用していたのですが、ある日突然一部のカテゴリのみエラーメッセージが出て入れなくなりました。
ホームページ ​http://www.iinamae.net/​ 上の
「姓に合った吉名を検索」「漢字から名前を検索」「響き・読みから名前を創る」のカテゴリから入り検索しようとすると・・・

「参照元が変です。左のメニューより再度実行してください。セキュリティソフトなどにより参照元を隠している場合は、設定を変更するなどして下さい。」

とエラーメッセージが表示されます。
3つのカテゴリ以外は利用できます。
今までは普通に出来てましたし、特に設定など変えた覚えはありません。無料サイトですし。。

問い合わせしようにもそのような機能は無いようです。
どたたか詳しい方いらっしゃいましたらアドバイスお願いします。

Aベストアンサー

セキュリティソフトがリファラーを隠蔽してるから出てるだけです。
セキュリティソフト停止してやってみればエラーにならないと思いますよ。

セキュリティソフトのメーカーサポートに電話して、リファラーを隠蔽しない設定を教えて貰いましょう。(マニュアル読んで理解できるなら、マニュアル読んでください。普通は書いてありますから。)

QActiveX EXEとタイマーとVB

いつもお世話になってます。

さっそく質問ですが、
ActiveX EXE側にタイマーとテキストボックスを持っています。

VB側のフォームにテキストボックスがあります。

VBからActiveX EXEを起動させ、決まった時間(例えば5秒おき)にVBのテキストボックスに
ある文字を表示させる、ということがしたいです。

条件として、
VB側の動きは、
(1)最初のActiveXを起動
(2)ActiveXのSetとNothingだけしかしない
                  しかしません。
なので、ActiveXからは「RaiseEvents」はしません。

ActiveX側で、タイマーイベント部分に、
ActiveXのフォームのテキストボックス.text = "文字"
set △△ = ActiveXのフォームのテキストボックス
(△△は、ActiveXのフォームのテキストボックスとしてセットされています。)
のように、プログラムしてみたのですが、
VB側のテキストボックスに表示できませんでした。

尚、VB側は、ActiveX以外の処理があるので、途中からActiveXを起動させることになります。

この条件で、VBのテキストボックスに文字を表示させることはできますか?
もしできるとしたら、どのような方法がありますか??

まだネットや本で調べ途中なので、もし何か参考ページがありましたら教えていただきたいです。


よろしくお願いします。

いつもお世話になってます。

さっそく質問ですが、
ActiveX EXE側にタイマーとテキストボックスを持っています。

VB側のフォームにテキストボックスがあります。

VBからActiveX EXEを起動させ、決まった時間(例えば5秒おき)にVBのテキストボックスに
ある文字を表示させる、ということがしたいです。

条件として、
VB側の動きは、
(1)最初のActiveXを起動
(2)ActiveXのSetとNothingだけしかしない
                  しかしません。
なので、ActiveXからは「RaiseEvents...続きを読む

Aベストアンサー

ActiveX EXEを起動する際に、VB側のTextBoxのObjectを渡しておいて、タイマルーチン内でそのTextBox Objectを使って文字を表示させればいいのではないでしょうか。

明後日のことを言ってたらごめんなさい。

Qエクセルの「IF+VLOOKUP」に関してのよくある問題で、意味のわからない相対参照があります

「1.セル【C18】にセル【B18】の「商品コード」に対応する「商品名」を返す数式を入力して下さい。「商品一覧」の表を参照すること。
次に、「商品コード」が入力されていない場合は、「商品名」にエラーが表示されないように数式を修正して下さい。(シートに表があり、IF+VLOOKUPを使う問題です)

2.セル【C18】の数式をもとに請求書の表を完成させて下さい」(←「【C18】の下の行も同じように、商品コードから商品名を表示させれるように完成させなさい」っていう問題です)

上記のような問題があったのですが、
数式を入力して下にオートフィルして
完成させたのですが、【問題の解答】を見た限りでは
「セル【C18】を「=IF($B18="","",VLOOKUP($B18,$H$18:$J$29,2,FALSE))」と修正する」
と書いてありました。

ですが、数式の「$B18」の部分で「列を固定にする」
意味はあるのでしょうか?
「$」はなくてもちゃんと機能してますし、
表も完成してるように思うのですが・・・

あと、これは商品コードが空白の場合にはエラーが
出ないのでいいのですが、商品コードとは関係ない
文字列も入れた場合(間違った文字列を入れた場合)に
エラーがでないようにする事もできますでしょうか?

「1.セル【C18】にセル【B18】の「商品コード」に対応する「商品名」を返す数式を入力して下さい。「商品一覧」の表を参照すること。
次に、「商品コード」が入力されていない場合は、「商品名」にエラーが表示されないように数式を修正して下さい。(シートに表があり、IF+VLOOKUPを使う問題です)

2.セル【C18】の数式をもとに請求書の表を完成させて下さい」(←「【C18】の下の行も同じように、商品コードから商品名を表示させれるように完成させなさい」っていう問題です)

上記のよう...続きを読む

Aベストアンサー

こんにちは。maruru01です。

表にないデータを入力した場合の対処方法の別解です。

=IF(LEN($B18),IF(COUNTIF($H18:$H29,$B18),VLOOKUP($B18,$H$18:$J$29,2,FALSE),""),"")

ちなみに、個人的には、巷にあるExcel関数の問題集の解答は、鵜呑みにしてはいけないと思っています。
(解答作成者のレベルによりますから。)
また、解答は1とおりしかないわけでもない場合が多いですし。
(私の上式も、ちょっとアレンジしてあります。)

QActiveX EXEのオブジェクトに渡したオブジェクトが微妙

またまた微妙な質問ですみません。

-------
ActiveX EXEプロジェクト
Class Hoge

Public Sub Moge(lst)

Dim Cast As ListBox
MsgBox TypeName(lst) 'ListBoxと表示される
Set Cast = lst 'ここがエラー
Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能

End Sub
-------
標準EXE
Class Form1 (List1を配置)

Dim X As New Hoge

Private Sub Form_Load()

X.Moge List1

End Sub
-----

このように、アウトプロセスのオブジェクトにフォームのコントロールを渡しました。
引数の型をAs ListBoxにしたかったのですが、それだとまずそこで型が一致しないといわれます。
しようがないのでVariantで引数を宣言し、渡した後にキャストしようと思ったのですが、そこでも型が一致しないといわれます。
TypeName関数は "ListBox" を返すし、Variant型のままメンバにアクセスすることはできるのですが、ListBox型の変数に代入することだけできないのです。

別プロセスのオブジェクトには、オブジェクトの参照は渡せないのでしょうか?

またまた微妙な質問ですみません。

-------
ActiveX EXEプロジェクト
Class Hoge

Public Sub Moge(lst)

Dim Cast As ListBox
MsgBox TypeName(lst) 'ListBoxと表示される
Set Cast = lst 'ここがエラー
Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能

End Sub
-------
標準EXE
Class Form1 (List1を配置)

Dim X As New Hoge

Private Sub Form_Load()

X.Moge List1

End Sub
-----

このように、アウトプロセスのオブジェクトにフォームのコ...続きを読む

Aベストアンサー

リストボックスをオブジェクト変数にセットして、何をしたいのでしょうか?
それがわかった方が、求める動きが可能かもしれません。

別プロセスでオブジェクトを渡すのは無理かと思います。
もしできるとしたら、オブジェクトのハンドルを取得し、オブジェクト変数の領域を確保。そこに代入という方法が思いつきますが、領域確保が思うようにならないVBでは落ちると思います。

ただリストボックスの選択している場所を得たいとか、選択させたいとか、そういう操作なら別プロセスなら、ハンドルだけで操作する方法もあります。

結局結末は何がしたいのでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報