C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

Vb.netで作成したdllをc#で利用 /ホノカ (18/07/30(Mon) 20:41) #88046
Re[1]: Vb.netで作成したdllをc#で利用 /魔界の仮面弁士 (18/07/30(Mon) 21:02) #88047
  └ Re[2]: Vb.netで作成したdllをc#で利用 /ホノカ (18/07/31(Tue) 23:07) #88074
    ├ Re[3]: Vb.netで作成したdllをc#で利用 /せば (18/08/01(Wed) 11:53) #88075
    └ Re[3]: Vb.netで作成したdllをc#で利用 /Azulean (18/08/01(Wed) 22:00) #88085


親記事 / ▼[ 88047 ]
■88046 / 親階層)  Vb.netで作成したdllをc#で利用
□投稿者/ ホノカ (1回)-(2018/07/30(Mon) 20:41:37)

分類:[.NET 全般] 

はじめまして。
Vb.netで作成したdllをVb.netで利用することはできます。
ですが、Vb.netで作成したdllをc#で利用できません。
Vb.netで作成したdllをc#で利用する方法をご存知でしたら教えていただけないでしょうか。

プログラミング初心者です。
環境は、visual studio 2017 express,32bit windows proです。
よろしくお願いします。
[ □ Tree ] 返信 編集キー/

▲[ 88046 ] / ▼[ 88074 ]
■88047 / 1階層)  Re[1]: Vb.netで作成したdllをc#で利用
□投稿者/ 魔界の仮面弁士 (1756回)-(2018/07/30(Mon) 21:02:08)
No88046 (ホノカ さん) に返信
> Vb.netで作成したdllをVb.netで利用することはできます。
> ですが、Vb.netで作成したdllをc#で利用できません。
具体的に、どのような操作をした時に、どのような状態になるのかを教えてください。
何らかのエラーが出るようなら、そのエラー内容を正確に記載願います。

また、参照設定が正しく行われているかも確認してください。
VB で作成した DLL を DllImport 属性を通じて呼び出そうとしているわけでは無いのですよね?


VB.NET でコンパイルしたものは、特別な指定が無い限り、Microsoft.VisualBasic.dll への参照を
必要としますが、そのことが問題になることは少ないはずですし…。


> Vb.netで作成したdllをc#で利用する方法をご存知でしたら教えていただけないでしょうか。
C# 製 DLL を VB から参照設定して利用することは可能ですし、
VB 製 DLL を C# から参照設定して利用することも可能です。


文法的な差異の違いにより、「C# からは利用できるが、VB だと利用できないクラス」や
「VB だと利用できるが、C# からは利用できないクラス」を作ることもできなくはないですが、
そういう状況に陥るのは稀だと思いますし。

※ ちなみに「c#」ではなく、「C#」が正式名称です。
[ 親 88046 / □ Tree ] 返信 編集キー/

▲[ 88047 ] / ▼[ 88075 ] ▼[ 88085 ]
■88074 / 2階層)  Re[2]: Vb.netで作成したdllをc#で利用
□投稿者/ ホノカ (2回)-(2018/07/31(Tue) 23:07:39)
 返答、ありがとうございます。C#なのですね。
詳しく記載します。

----------------------------------------------------------------------------------
新規でC#のFormを作成する。→
ソリューションエクスプローラーから追加→新しいプロジェクト
→Visual Basic→クラスライブラリ→ClassLibrary1を名前にする→OK→
ClassLibrary1のClass1.vbを以下にする。


ここから
Public Class Class1
Public Function f(ByVal a1 As Integer) As String
Return (a1 + 100)
End Function
End Class
ここまで


ClassLibrary1をビルドし、ClassLibrary1.dllを作成する。→
ソリューションエクスプローラーからC#のプロジェクトを参照を選択→
参照の追加→ClassLibrary1.dllを追加→OK→
ソリューションエクスプローラーからC#のプロジェクトを参照を選択→
参照の追加→Microsoft.VisualBasic.dllを追加→OK→
C#のProgram.csを以下にした後ビルドする。

ここから
using System;
namespace test01
{
static class Program
{
[STAThread]
static void Main()
{
object Test02 = new ClassLibrary1.Class1();

Console.WriteLine(Test02);
Console.WriteLine(Test02.f(1));
}
}
}
ここまで
----------------------------------------------------------------------------------

----------------------------------------------------------------------------------
エラーメッセージ
'object' に 'f' の定義が含まれておらず、型 'object' の最初の引数を受け付ける拡張
メソッド 'f' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が
不足していないことを確認してください。
----------------------------------------------------------------------------------


Console.WriteLine(Test02.f(1));に対して、エラーが発生します。
Test02.を入力した後、インテリセンスで
fを選びたいのですが、インテリセンスにはfがありません。

[ 親 88046 / □ Tree ] 返信 編集キー/

▲[ 88074 ] / 返信無し
■88075 / 3階層)  Re[3]: Vb.netで作成したdllをc#で利用
□投稿者/ せば (3回)-(2018/08/01(Wed) 11:53:18)
> object Test02 = new ClassLibrary1.Class1();
objectになってますね。

ClassLibrary1.Class1 Test02 = new ClassLibrary1.Class1();
で通るんじゃないかな
[ 親 88046 / □ Tree ] 返信 編集キー/

▲[ 88074 ] / 返信無し
■88085 / 3階層)  Re[3]: Vb.netで作成したdllをc#で利用
□投稿者/ Azulean (962回)-(2018/08/01(Wed) 22:00:19)
No88074 (ホノカ さん) に返信
> object Test02 = new ClassLibrary1.Class1();

すでに指摘がありますが、C# は型を厳密にチェックする方の言語です。
ですので、object という型には f というメソッドがないのでエラーになります。

new するときに左側にも型を書きたくないということであれば、object の代わりに var と書いてください。
コンパイル時に右辺から推定されます。

VB.NET みたいに実行時までわからないを希望するなら dynamic キーワードもありますが、お勧めしません。
コンパイル時にエラーがわかった方がトータルの開発の労力も低いためです。
[ 親 88046 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -