C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[3]: Vb.netで作成したdllをc#で利用
(過去ログ 151 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 5 記事 (1 - 5 表示)] <<
0
>>
■88046
/ inTopicNo.1)
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です。
よろしくお願いします。
引用返信
編集キー/
編集
■88047
/ inTopicNo.2)
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#」が正式名称です。
引用返信
編集キー/
編集
■88074
/ inTopicNo.3)
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がありません。
引用返信
編集キー/
編集
■88075
/ inTopicNo.4)
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();
で通るんじゃないかな
引用返信
編集キー/
編集
■88085
/ inTopicNo.5)
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 キーワードもありますが、お勧めしません。
コンパイル時にエラーがわかった方がトータルの開発の労力も低いためです。
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-