ここから本文です

C#の場合の 自作DLL作成と参照について

pok********さん

2011/4/1917:20:55

C#の場合の 自作DLL作成と参照について

新規プロジェクトで 「C#クラスライブラリ」を選択して、コードを記述してビルド後、dllが作成しました。
以下コードです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1
{
public partial class Class1
{
public int theSample(int iA, int iB)
{
int iAns;
iAns = 0;
iAns = iA + iB;
return iAns;
}
}
}

その後、別のプロジェクト(C# ASP.NET 空のWebアプリケーション)で、参照を試みたいのですが参照自体の書き方がうまくいきません。
以下、別プロジェクトのコードです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.InteropServices;

namespace WebAppDLLSample
{
public class tekitou
{
[DllImport("ClassLibrary1.dll")]
public partial int add(int a, int b)
{
return ans;
}
}
public partial class WebForm1 : System.Web.UI.Page
{
}
}

この記述だと the sample関数の内容を取得できませんでした。
このDLLの作成自体間違っているのかもしれません。

どうすれば取得できるのでしょうか。ご教授ください。お願いします。

閲覧数:
71,177
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

abi********さん

編集あり2011/4/1921:32:53

DLLをC#で作るのならば、DllImport("ClassLibrary1.dll")等の指定は不要です。
(DLL をVC++で作るのならば、特別な指定が必要ですが、C#ならば不要です)
すなわち、DLL側は、普通にクラスを作ります。
また、DLLを呼び出す側は、普通にクラスを生成して、また呼び出します。

なお、DLLを利用するための指定は、コードでは無く、操作で行ないます(後述の<DLLを利用するための指定>での操作)。





[DLL側]

<プロジェクトの作成>
[ファイル]-[新規作成]-[プロジェクト]で「新しいプロジェクト」画面を表示します。
「新しいプロジェクト」画面での、プロジェクトの種類(テンプレート)で、[クラスライブラリ]を選択。
また、「新しいプロジェクト」画面のプロジェクト名に、作成するプログラムの名前を入力して、[OK]ボタンを押下してください。

<コードの記述>
コードは、普通にクラスを作ります。
コード例を下記に記します。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1
{

public class SampleClass
{


public int SampleMethod(int x, int y)
{
return x + y;
}


}

}




<ビルド>
[ビルド] - [ソリューションのビルド]で、DLLが完成します。





[DLLを利用する側]

<プロジェクトの作成>
[ファイル]-[新規作成]-[プロジェクト]で「新しいプロジェクト」画面を表示します。
「新しいプロジェクト」画面での、プロジェクトの種類(テンプレート)で、[Windows フォームアプリケーション]を選択。
また、「新しいプロジェクト」画面のプロジェクト名に、作成するプログラムの名前を入力して、[OK]ボタンを押下してください。

<DLLを利用するための指定>
[プロジェクト] - [参照の追加]で、「参照の追加」画面を表示します。
その画面の[参照]タブを選択します。
その画面で、先程作成したDLL(拡張子が dll のファイル)を指定して、[OK]ボタンを押下してください。

<コードの記述>
あとは、普通にDLL で定義したクラスを呼び出せます。

例えば、まず、デザイン画面のフォームをダブルクリックします。
そうすると、Form1_Load() と言うメソッドが自動作成されます。
あとは、以下のようなコード例を記述して下さい。

コードは、普通にクラスを呼び出す書き方でOKです。
コード例を下記に記します。
なお、メッセージボックスに処理結果を表示する仕様にしてあります。



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{

public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}



private void Form1_Load(object sender, EventArgs e)
{

ClassLibrary1.SampleClass obj = new ClassLibrary1.SampleClass();
int ans = obj.SampleMethod(2, 3);
MessageBox.Show(ans.ToString());

}



}

}




<ビルド>
[ビルド] - [ソリューションのビルド]で、完成します。




[一緒に編集する場合]

なお、DLLを利用する側のプロジェクトに、DLL側のプロジェクトを組み込んで、一緒に編集する事も可能です。
DLLを利用する側のプロジェクトでの「ソリューション」画面で、その一番上側の「ソリューション'ooo'」と書かれた箇所を右クリックします('ooo'は、プロジェクト名)。
そうするとプルダウンメニューが表示されます。
そのメニューの [追加] - [既存のプロジェクト]で、「既存のプロジェクトの追加」画面を表示。
その画面で、DLL のプロジェクトファイルを指定して、[開く]ボタンを押下します。

そうすると、「ソリューション」画面に、DLL側のプロジェクトが追加されています。




[追記]

ごめんなさい。
呼び出す側は、ASP.NET ですね。
上記のWindowsフォームアプリケーションの場合に限らず、ASP.NET でも、コンソールアプリケーションでも同じです。
すなわち、前述の<DLLを利用するための指定>を行なうだけであって、あとは、普通にクラスを呼び出せます。

質問した人からのコメント

2011/4/20 14:28:38

成功 abiko_tetuさん ありがとうございました。
わかりやすい説明ですぐに理解できました。今回作成するDLLは全てC#で作成するので、DllImport()は使用しません。DllImportの使用範囲をもっと調べるべきでした。

naolin_17_1986さん
>メソッド名に static をつけると new なしで呼び出せます。

たしかにインスタンスを設定せずに簡単に呼び出すことができました。
お二人ともありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

nao********さん

編集あり2011/4/2008:05:07

1.ソリューションエクスプローラーで「参照の追加」(英語版はAdd reference)をクリック
2.ライブラリを作成したDLLを追加(Add)
3.using ClassLibrary1;を書いてクラス名.メソッド名(引数);と呼び出せます。

using System.Runtime.InteropServices;はWin32APIなどのアンマネージコードを呼び出すための名前空間ですので不要です。

abiko_tetuさん に補足しますが、
メソッド名に static をつけると new なしで呼び出せます。

jta********さん

2011/4/1919:13:16

DllImport属性はアンマネージドなDLLを呼び出すときに使われるんじゃなかったっけ。

DLLアセンブリを参照するんだったら、参照の追加をしてやれば普通に呼び出せるんだと思ったんだけど。
http://msdn.microsoft.com/ja-jp/library/wkze6zky.aspx

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる