2011-02-02 12 views
2

私はC#フォームアプリケーションを持っています...私はDLLを作成しました...今、私はこのプログラムを使用してそのDLLを起動します。どうすればいいのですか?C#プログラムを使用してDLLを起動

#include <windows.h> 

typedef int (*function1_ptr)(); 

function1_ptr function1=NULL; 

int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { 

HMODULE myDll = LoadLibrary("Dll1.dll"); 

    if(myDll!=NULL) { 
     function1 = (function1_ptr) GetProcAddress(myDll,"function1"); 

     if(function1!=NULL) 
      function1(); 
     else 
      exit(4); 

     FreeLibrary(myDll); 
    } 
    else 
     exit(6); 
    GetLastError(); 

    return 0; 
} 

これはすなわちDll1.dll ...私のDLLをテストするために使用されるコードだった... function1はdll1.dll内の機能だった.....私はC#のコードと似た何かを行うことができます?

+4

「起動」とは何ですか? dllはクラスのコンテナです。 DLLにエントリポイントはありません。 –

+0

このプログラムを使用してDLLを呼び出すには... DLLが動作するかどうかを確認する... DLLを呼び出すコードを試してみましたが... DLLが動作していることがわかりました –

+1

何ですか"dllが動作するかどうか"を意味します。どうやって作業を定義しますか? DLLのすべての機能?ちょうどあるもの? DLLを実行することはありません。 – Davy8

答えて

3

行うには、あなたのコードの例が何をするか、次のC#のコードを使用します。

public static class DllHelper 
{ 
    [System.Runtime.InteropServices.DllImport("Dll1.dll")] 
    public static extern int function1(); 
} 

private void buttonStart_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     DllHelper.function1(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
}  

上記の例では、非.NETベースのDLL内の関数を呼び出すC#プログラムです。 以下の例は、.NETベースのDLLで関数を呼び出すC#プログラムです。

try 
{ 
    System.Reflection.Assembly dll1 = System.Reflection.Assembly.LoadFile("Dll1.dll"); 
    if (dll1 != null) 
    { 
     object obj = dll1.CreateInstance("Function1Class"); 
     if (obj != null) 
     { 
      System.Reflection.MethodInfo mi = obj.GetType().GetMethod("function1"); 
      mi.Invoke(obj, new object[0]); 
     } 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

あなたが望む2つの例はどれですか。 または、サンプルコードからDLL内のC#関数を呼び出そうとしていますか?

0

あなたはexeファイルのためにこれを行うことができます:あなたはあなたのプロセスにDLLをロードすると、それを消費している場合

Process.Start("yourProcess"); 

またのAppDomainオブジェクトを使用することができます。

そして最後に、あなたはそれぞれが独自の目的を果たし

Assembly.Load(...) 

を使用することができますし、私は初心者のために、MSDN上でそれらのすべての上に読むことをお勧めします。

1

DLLの機能を使いたいと思っていますか?その場合は、DLLへの参照を作成し、C#フォームアプリケーションで使用します。言い換えると、DLLに含まれるアプリケーションロジック用の「ユーザー」インターフェイスを作成します。これが意味をなさない場合は、プロジェクトへの参照を追加する方法を調べる必要があります。

0

フォームアプリケーションへの参照としてDLLを追加します。次に、アプリケーションコードからその中の名前空間とクラスにアクセスできます。

0

C#アプリケーションでは、作成したアセンブリ(DLL)への参照を追加します。これは、ソリューションエクスプローラウィンドウから行うことができます。参照を右クリックし、「参照の追加...」と言い、DLLを選択します。

その時点で、 "using YourDllNamespace;"をC#フォームのクラスの先頭に追加し、必要に応じてDLL内で定義された型を使用できます。別のDLLIMPORT属性を使用している

Assembly.Load 

0

あなたはさまざまな方法を使用することができ、一つは次のとおりです。

[DllImport("mylib.dll)] 
1

あなたのDLLの実行可能ファイルを作成し、その後、診断からProcessクラスを使用します。

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

  Process myProcess = new Process(); 

      try 
      { 
       myProcess.StartInfo.UseShellExecute = false; 
       // You can start any process, HelloWorld is a do-nothing example. 
       myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; 
       myProcess.StartInfo.CreateNoWindow = true; 
       myProcess.Start(); 
       // This code assumes the process you are starting will terminate itself. 
       // Given that is is started without a window so you cannot terminate it 
       // on the desktop, it must terminate itself or you can do it programmatically 
       // from this application using the Kill method. 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
+0

なぜそれを実行可能にするのですか?私は.Net Coreを使用しています。その目的は、クロスプラットフォームでアプリケーションを実行することです。私はdllを実行したい、少なくとも私の好みです。 –

0

あなたのプロジェクトには、そのDLLにadd referenceすることができます。

1. ゴーあなたのdll
4を参照するメニュー
またはソリューションエクスプローラ
2. [参照の追加
3.プロジェクトに:STEPS次の参照の使用を追加するには

。OK

1

起動とDLLという用語は、互換性のない概念です。オペレーティングシステムは、定義されたエントリポイントを持つバイナリであるプログラムを起動します。 DLLは、APIの形式で複数のエントリポイントを持つバイナリとしてよく見られます。この場合、オペレーティングシステムはこれらの多くのエントリポイントを選択する必要があります。

DLLから特定のオブジェクトを使用しようとしましたか?それでは、「ソリューションエクスプローラ」でプロジェクトを次

  • 右クリックを試してみて、選択した場合は、「参照」タブの問題のDLLへ
  • 移動を選択してください
  • を「参照の追加」し、[OK]をヒット

これで、プロジェクト内でDLLの種類を使用できるようになりました。

MyOtherDLLNamespace.TheType local = ... 
関連する問題