2013-06-13 12 views
6

私はC#でコンパイルされたクラスプロジェクトa.dllを持っています。以下のコードが含まれています。 C#プロジェクトからC#で定義された関数を同じパラメータ、戻り値の型、同じ名前でVB.NETプロジェクトとは別の方法で呼び出す方法

public class MyClass{ 
    public int Add(int i,int j) 
    { 
     return (i+j); 
    } 

    public int add(int i,int j) 
    { 
     return (i+j)*2; 
    } 
} 

私はこの

public class MyOtherClass{ 
MyClass mcls=new MyClass(); 
mcls.Add(1,2); 
mcls.add(2.3); 
} 

のように、これらの関数を呼び出すことができますしかし、どのように私はVB.Net Projectからこれを呼び出すことができますか?私は今Visual Studioを使用する立場にはいません。だから誰かが答えを提供するなら、非常に役立ちます。

EDIT 1

私はVB.NETのプロジェクトを持っていると私は、私は二つの方法(Add(int,int) , add(int,int))を呼び出すことができますC#のDLL(say dll contains MyClass)。だからの参照を追加する必要があります。しかし、VB.NETでは大文字と小文字が区別されます。これを達成する方法はありますか?仮定

EDIT 2

Iは、DLLへの参照を追加したので、私は可能な機能を呼び出すことができます。

Dim myObj as New MyClass 
myObj.Add(1,2) 
myObj.add(1,2) 

コンパイラが正しい機能をどのように識別しているかは、このコードで確認できますか?

+0

Addの名前を変更してAddAndDoubleにするのはなぜですか? – Andy

+0

+1良いロジック! CLSのガイドラインに違反しています –

答えて

5

あなたの最善の策はここにリフレクションを使用することです別のスコープ - VBは、単にあなたがVB「追加」であるため呼び出している関数を決定し「追加」と同じであることはできません。ここで

は(私はあなたがここに結合する必要がある "のBindingFlags本当にわからないんだけど)、私はそれをテストするためにやったことだ:

Dim mcls As New [MyClass] 
Dim t As Type = mcls.GetType() 
Dim x = t.InvokeMember("add", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, mcls, New Object() {1, 2}) 
Dim y = t.InvokeMember("Add", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, mcls, New Object() {1, 2}) 
+0

ちょっと単純化しました。別のアセンブリの読み込みが不要です。既に読み込まれていますが、 GetTypeを使用してください。 –

+0

ありがとうございます。その適切な答え。 – kbvishnu

2

あなたのC#コードは、CLSに準拠している場合、あなたは単にあなたのvb.netのproject.namespaceにそれへの参照を追加することができ、DLLの公共のメンバーはここ
http://www.christec.co.nz/blog/archives/290


もっとacessedすることができます

無料のオンラインconvesionツールも使用できます。
例:http://www.developerfusion.com/tools/convert/vb-to-csharp/

更新:リンク注上記1として *

このhttp://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/dda8d7cb-0fa1-43d6-a90f-6c4bed0b40bb

Dim c As New MyClass() 
MsgBox(c.Add(1, 2)) 'if only Add() is Available 


アップデート2を読みますC#プロジェクトで
*

また、AssemblyInfo.cs:

using System; 

// etc 

[assembly: CLSCompliant(true)] 

にUpdate3と次の行を追加します。私はあなたががあなたのC#コードは、CLSに準拠していることを確実にする上で言ったように

。 VB.NETはない場合
C#が、大文字と小文字が区別されます。あなたはは私が

http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/

update4長い前に私を導いた記事を見つけた
アップデート2が最後に準拠した自然

を確保するために注意してくださいCLSガイドラインに違反しています:

http://msdn.microsoft.com/en-us/magazine/cc163750.aspx

+0

私は参照を追加し、その関数を呼び出す方法は? – kbvishnu

+0

更新された質問を確認できます – kbvishnu

+0

これは質問とは関係ありません。 – Andy

1

実際にVBを使用すると、名前でAdd方法のいずれかを呼び出すことはできません。 Addという名前が曖昧であることを示すコンパイラエラーが発生します。大文字と小文字だけが異なる2つのパブリックメンバー名を与えることは、CLSに準拠していません。 C#クラスを作成した人に電話をかけ、CLS準拠の名前を使用するように指示します。彼らがそれをしないなら、あなたは反射に頼らなければならないでしょう。

+0

はあなたの意見に同意しました。 +1 :)この質問は、私の友人に聞いた面接の質問であり、彼は解決策を私に確認した。ありがとう – kbvishnu

+0

@VeeKayBee私は仕事を持っている場合私に教えてください:) –

+0

確かに。彼は選ばれましたが、彼は彼の質問の答えについて全く知らない – kbvishnu

関連する問題