web-dev-qa-db-ja.com

DLLから関数を呼び出しますか?

私はC#が初めてで、DLLの使用方法を学ぼうとしています。オブジェクトをDLLでラップしてから、プログラムで使用しようとしています。

public class Foo   // its in the DLL
{
   public int ID;
   public void Bar()
   {
      SomeMethodInMyProgram();
   } 
}

だから、これをDLLにパックしようとしますが、コンパイラはSomeMethodInMyProgram()が何であるかを知らないので、できません。

私はそれを次のように使いたい:

class Program // my program, using DLL
{
    static void Main(string[] args)
    {
       Foo test = new Foo();
       test.Bar();
    }
 } 
27
Dominik Antal

ソリューションエクスプローラーを介してDLLを追加-参照を右クリック->参照を追加してから、参照DLL-使用可能になります。

26
Rob

DLLの種類によって異なります。これは.NETに組み込まれていますか?アンマネージコードの場合、ここに例を示します。それ以外の場合は、Robからの回答が機能します。

アンマネージC++ dllの例

using System;
using System.Runtime.InteropServices;

DllImportを使用する必要がある場合があります

[DllImport(@"C:\Cadence\SPB_16.5\tools\bin\mpsc.dll")]
static extern void mpscExit();

または

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

次に、これらのそれぞれが次のように呼び出されます。

// a specific DLL method/function call
mpscExit();
// user32.dll is Microsoft, path not needed
MessageBox(new IntPtr(0), "Test", "Test Dialog", 0);  
39
Tom Stickel

実際にDLLを実行時にアプリケーション、つまりDLLの動的部分にロードする必要があります。また、DLLだから、あなたのコンパイルはどの関数が定義されているかを知っています。ここでの私の知識はC++に基づいているので、これがC#でどのように機能するかはわかりませんが、そのようなものになります...

4
thecoshman

私はここでパーティーに遅れていますが、私のような髪を引っ張ってくる人にこの答えを残しています。だから基本的に、この問題に直面したときVS IDEの贅沢を持っていなかった。私はcscを使用してcmdline経由でコードをコンパイルしようとしていた。/r:PathToDll/NameOfTheDll to csc。

コマンドは次のようになります

csc/r:PathToDll/NameOfTheDll/out:OutputExeName FileWhichIsReferencingTheDll.cs

In FileWhichIsReferencingTheDll.cs add using namespace AppropriateNameSpace;関数にアクセスします(静的の場合はclass.functionNameを呼び出すか、クラスのオブジェクトを作成し、オブジェクトで関数を呼び出します)。

4
Abhi7950