【先着1,000名様!】1,000円分をプレゼント!

お世話になります。
VB.Net 駆け出しの者です

プロジェクトをビルド、リビルトすると、いつからか以下のメッセージが出るようになっていました。

******************************************************

vbc : warning BC40059: アセンブリ 'Microsoft.VisualBasic.Compatibility' からの間接的な参照が原因で、埋め込まれた相互運用機能アセンブリ 'stdole' に対して参照が作成されました。両方のアセンブリで '相互運用機能型の埋め込み' プロパティを変更することを検討してください。

******************************************************

上記のメッセージが出ても、デバックもしくは発行で実行することは可能なのですが、何か気持ち悪い気がしております。エラーメッセージならクリックすればそのコードに移りますが、実際にどこがという指定がないので、その問題の箇所にたどり着けないのです。
上記のメッセージ、もしくはそのほかの情報からなんとかメッセージの箇所を突き止める方法はありますでしょうか?何かご存知の方がいらっしゃいましたら何卒ご教授いただければと存じます。

よろしくお願いいたします。

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

A 回答 (2件)

> ご指摘のページは既に見ていたのですが、assembly2 や Embed Interop Types という


> ワードでプロジェクト内のコードで検索をかけたのですが、まったく引っかからず原因箇所が
> 特定できない状態でしたのでこちらで質問させていただいたしだいであります;;
(1)assembly2
エラーメッセージの説明ページでは、実際のメッセージの一部分を総称的に記述する場合が多々あります。説明ページでは実際のコードまたはプロジェクト構成を特定することができないためです。
この場合、説明ページ内の一部記述を実際のエラーメッセージの記述に置き換えて読む必要があります。

説明ページの
 アセンブリ '<assembly2>' からの間接参照により、埋め込まれた相互運用機能アセンブリ '<assembly1>' の参照が作成されました。

あなたのエラーメッセージの
 アセンブリ 'Microsoft.VisualBasic.Compatibility' からの間接的な参照が原因で、埋め込まれた相互運用機能アセンブリ 'stdole' に対して参照が作成されました。
とを比較すると、<assembly1> が 'stdole' に、<assembly2> が Microsoft.VisualBasic.Compatibility に対応していることがわかります。
したがって、以下の解説では文中の assembly1 および assembly2 を上記に置き換えて読む必要があります。

(2)Embed Interop Types
VB.Net のことは解らないのですが、コード中ではなく、アセンブリ参照の設定画面にそういう項目はないでしょうか?
    • good
    • 0
この回答へのお礼

hitomura さん お世話になります。

プロジェクトの参照追加の箇所で、stdole という名前にチャックが入っていたので、もしやと思い、チェックを外したら 問題のメッセージは表示されなくなりました。
この部分にチェックを入れた覚えはないのですが、解決方法が見つかり すっきりいたしました。

ありがとうございました。

お礼日時:2013/09/08 12:11

警告の番号で検索したら次のページが見つかりました。


http://msdn.microsoft.com/ja-jp/library/vstudio/ …
……えーと、これ読んでどうすればいいかわかりましたでしょうか?

この回答への補足

hitomura さん お世話になります。
ご指摘のページは既に見ていたのですが、assembly2 や Embed Interop Types というワードでプロジェクト内のコードで検索をかけたのですが、まったく引っかからず原因箇所が特定できない状態でしたのでこちらで質問させていただいたしだいであります;;

補足日時:2013/09/08 07:45
    • good
    • 0

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

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

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

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

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

QVB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?

VB6.0で、例:StrConv(Text, vbFromUnicode)とかで使用する、
「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する)
は、VB.NETでは使用できないようです。(相当する定数はない?)

「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
どうすれば良いでしょうか?

Aベストアンサー

思いっきり、例文に「COM1」と書いてますが、USBに書き換えてくださいね^^;

それとふと思ったのですが
udtReaderWriterModeWithoutEncryption
変数は構造体ですよね?

メンバが
lngPortName
lngBardRate
というのは、型宣言をINTEGERに変換してますよね?

ちょっとばかり不安に思ったので、追記しておきました。

参考URL:http://okweb.jp/kotaeru.php3?q=1257613

QVB6からVB2010への変換について

今、WindowsXP上のVB6プログラムを、Windows7上のVB2010プログラムへ変換作業をしています

手順は
1.VB2008Expressのアップグレードウィザードを使って、一度VB2008版を造りました
  その時に、フォームサイズを変えるステートメントが次のように変わりました

Imports VB = Microsoft.VisualBasic

Me.Width = 16000 → VB6.TwipsToPixelsX(16000)
Me.Height = 12250 → VB6.TwipsToPixelsY(12250)

2.次にWindows7上のVB2010で上記プログラムを読み込むと.
 
    VB6.TwipsToPixelsX(16000) のところに波型のアンダーラインが引かれ
    これは「旧形式です」のメッセージが出ました

 そこで、Microsoftのフォームページ(http://go.microsoft.com/fwlin/?linkid=160862')を参考に
下記のように修正しました

Imports Microsoft.VisualBasic.Compatibility.VB6

Me.Width = Support.TwipsToPixelsX(16000)
Me.Height = Support.TwipsToPixelsY(12250)
  
   と修正しましたが波型アンダーラインは消えませんでした

そこで質問ですが
 この波型アンダーラインは無視して良いのか、
 それともまだ使い方が間違っているのか分かりません
 そこのところご教授願えれば幸いです

  

今、WindowsXP上のVB6プログラムを、Windows7上のVB2010プログラムへ変換作業をしています

手順は
1.VB2008Expressのアップグレードウィザードを使って、一度VB2008版を造りました
  その時に、フォームサイズを変えるステートメントが次のように変わりました

Imports VB = Microsoft.VisualBasic

Me.Width = 16000 → VB6.TwipsToPixelsX(16000)
Me.Height = 12250 → VB6.TwipsToPixelsY(12250)

2.次にWindows7上のVB2010で上記プログラムを読み込むと.
 
   ...続きを読む

Aベストアンサー

VB6.0 では、ScaleMode(座標系の単位)は、twip 単位で、.NET 系は、pixel 単位です。
従って、Me.Width = 16000 の 16000 をtwip → pixel に変換してやればいいだけの事です。
元々Form のサイズの設定部分のコードなので、開発環境でデザイン時に Form のサイズを設定して
貴方が求めるサイズに書き換えてやるべきかと思います。
(元々サイズを直にコードで指定しているのだから)

twip → pixel に単位変換するには、簡易的には、一般的な環境では、16000 / 15 で求める事が
できます。
正確には、環境を考慮して係数を求めて変換する必要があります。


>そこで質問ですが
> この波型アンダーラインは無視して良いのか、
の件ですが、エラーメッセージの通りで、使用できますが、暫定的な方法なので、どうするかは
貴方が決める事かと思います。

VB6.0 のコードを VB2008等へ移行する場合は、アップグレードウィザードで全面的に変換すると、
一般的なコードは問題ないのですが、グラフィックや印刷関係等多くの部分で変換しきれないものが
多くでてきて、中には上記のように中間言語のような扱いで変換される場合があり、お勧めできません
後々の事を考えたら、変換結果等を参考に一から書き直す事が一番かと思います。
(変換結果のプロジェクトは、使用しないで、新規に作成したプロジェクトで作成の事)

VB6.0 のコードを VB.NET 系に移行するには下記等が参考になるかと。

Visual Basic 6.0 ユーザーのための Visual Basic .NET 移行ガイド
http://msdn.microsoft.com/ja-jp/library/dd314356.aspx

VB6.0 では、ScaleMode(座標系の単位)は、twip 単位で、.NET 系は、pixel 単位です。
従って、Me.Width = 16000 の 16000 をtwip → pixel に変換してやればいいだけの事です。
元々Form のサイズの設定部分のコードなので、開発環境でデザイン時に Form のサイズを設定して
貴方が求めるサイズに書き換えてやるべきかと思います。
(元々サイズを直にコードで指定しているのだから)

twip → pixel に単位変換するには、簡易的には、一般的な環境では、16000 / 15 で求める事が
できます。
正確には、環境...続きを読む

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

Q.NETアプリを作ったときの .manifest ファイルって必要なの

.NETアプリを作ったときの .manifest ファイルって必要なのですか?
現在、Visual Studio 2010でソフトを作っているのですが、
ビルドをすると、[Appname].exe.manifestというファイルが必ずできます。
ネットで検索したところ、GUIのスタイルに関する事らしいんですが、
manifestファイルが無い状態でもこちらの環境でも、他の環境でも変わったところは見当たりません。
このファイルは絶対に必要なものなのでしょうか?

また、どういうときに使うものなのでしょうか?

わかる方お願いします。

Aベストアンサー

自動生成された .manifest ファイルが XP Visual Style になっていないのではないでしょうか?
XP Visual Style になっていないと、ある場合とない場合とで見た目に違いはないと思います。
C# や VB ではプロジェクトのプロパティー画面に XP Visual Style の設定があるんじゃないかと思います。( Visual Studio 2008ではありました。)
C++ とかだと、.manifest ファイルを直接編集しなければならないかもしれません。( Visual Studio 2008ではそうでした。)
あと、ビルドの時に .manifest ファイルの内容を .exe ファイルに埋め込むようになっていると、実行時にはあってもなくても何も変わりません。
.manifest ファイルは、使用する DLL のバージョンの指定なんかも可能だったと思います。

QVB.NETで他のプロジェクトで作成したフォームを使う方法

こんにちは。
VB.NETのプロジェクトがぐちゃぐちゃで参照設定とかいろんなの呼んでしまっているので、新しく作成しなおしたいのですが、
新しいプロジェクトでプロジェクトを作成し、前のプロジェクトで必要なファイル(.vb、RESX)を新しいプロジェクトのフォルダにコピーしたのですが、
普通のモジュールは追加>新しい項目の追加でなんとか追加できたのですが、フォームの追加の仕方がわかりません><教えてくださいー

P.S. RESXファイルってフォームのデータが入ってるのでしょうか?そんな気がしてコピーしたのですが。

※VB6.0からVB.NETに以降した際にアップデート情報みたいなのがプログラム上にくっついてしまって.vbファイルも参照項目も増えまくってしまった

Aベストアンサー

ドラッグ&ドロップが使いやすい。
Windowsのエクスプローラでvbファイルをドラッグして、VS.NETのソリューションエクスプローラへドロップする。

Qvisual stadio 参照問題

タイトル通り、visual stadioを使って、メニューバー

(プロジェクト→参照の追加)の順番で追加すると、現在、プロジェクトには、(追加した項目)の複数のバージョンへの参照、バージョンへ(古いバージョン)の直接的な参照、およびパーション(新しいバージョン)への間接的な参照が含まれています。(追加した項目)バージョン(新しいバージョン)を使用するには、直接的な参照を変更してください。

すごく困ってますので、よろしくお願いいたします。

Aベストアンサー

表示されている項目の参照設定を一旦外して、正しい参照設定にしなおせばいいのでは。

QCOMコンポーネントって何?

よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。

Aベストアンサー

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出来るようになります。
それがクラスです。
その結果、プログラム中のデータや処理が、クラス単位で整理され、
それぞれ部品のように組み替えが可能になりました。

このように、クラス単位にプログラムを分割することで
巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。

また、クラスには親と子があり、「継承」という考えを用いて
どんどんバージョンアップや特化を行うことが容易です。

VBで説明すると、
Dim value as A
として変数を宣言した場合、クラスは「A」です。
valueはオブジェクトや、インスタンスと呼ばれます。
valueを使って、Aに含まれる関数を呼び出して、valueを
操作することが出来ます。
value.Init()
等。

ざっくり説明するとこんな感じです。
詳細については、各言語の書籍を参照してください。

このようにして作ったクラスを、
・他の言語から使いたい
・ネットワーク経由で使いたい
などと言った機能を実現する、Microsoft提供の方法の一つが、
COMやDCOMと呼ばれるものです。
COMは、他のプログラムからの使いまわしに強いので、
一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから
呼び出しが可能です。
また、COM自体のバージョンが上がっても、それを呼び出してる
プログラム自体には変更の必要がありません。

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出...続きを読む

QVB.NETのコンボボックスについて

VB6からVB.NETでプログラミングを始めました。
コンボボックスのクリアの仕方や設定の仕方、また
取り出し方等を教えて下さい。

色々とヘルプも見てみたのですが、よく解りません。
宜しくお願い致します。

Aベストアンサー

クリアだけだと思ってました。
追記します。

Itemを操作します


'登録
For i = 1 To 10
  Me.ComboBox1.Items.Add(i.ToString)
Next

'取得
For i = 0 To Me.ComboBox1.Items.Count - 1
  MsgBox(Me.ComboBox1.Items(i).ToString)
Next

'完全クリア
Me.ComboBox1.Items.Clear()

部分クリア
Me.ComboBox1.Items.RemoveAt(Index値)

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。

Qnull 参照の例外が実行時に発生する可能性があります

VB初心者です。色々調べてみたのですが分からなくて、ヒントでも結構ですので教えていただけないでしょうか。
現在VB.Net2003 からVB2005に移行しているのですが下記の関数で現在開いているフォームを調べていますがVB.Net2003だとなんら問題なかったのにVB2005では「関数 'FormIsLord_Tag' は、すべてのコード パス上では値を返しません。結果が使用されるときに、null 参照の例外が実行時に発生する可能性があります。」という警告が出てしまいます
Function FormIsLord_Tag(ByVal GetTag As String) As Form
Dim LoopForm As Form
Try
For Each LoopForm In Forms
If LoopForm.Tag = GetTag Then
Return LoopForm
End If
Next
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Function

If LoopForm.Tag = GetTag Then とかの前にLoopFormがNothingだったらとか色々やってみましたがわからなくて・・・
警告なので動かないって訳ではないのですが・・・
よろしくお願いします。

VB初心者です。色々調べてみたのですが分からなくて、ヒントでも結構ですので教えていただけないでしょうか。
現在VB.Net2003 からVB2005に移行しているのですが下記の関数で現在開いているフォームを調べていますがVB.Net2003だとなんら問題なかったのにVB2005では「関数 'FormIsLord_Tag' は、すべてのコード パス上では値を返しません。結果が使用されるときに、null 参照の例外が実行時に発生する可能性があります。」という警告が出てしまいます
Function FormIsLord_Tag(ByVal GetTag As String) As F...続きを読む

Aベストアンサー

お世話になります。

ロジックの内容をアタマの中で
フローチャート化してみると、
明示的に値を返していないパスがあるはずです。

「意識していないかもしれませんが、
このような可能性がありますよ」という警告だと思います。
Nothing を返すことを意識しているのであれば
明示的に書いてやると、この警告は消えます。

End Try
の後に、
Return Nothing
と書くと、
Forms が空っぽでも、
例外処理の Cacth ブロックに入ったときでも、
For Each ループ内で tag が該当しなくても
Nothing が明示的に返されます。


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

人気Q&Aランキング