- PR -

C#で作成したDLLのメソッドを別のプロジェクトから参照したい。

投稿者投稿内容
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 2008-12-08 19:47
お世話になります。
C#.NET2.0でWEBアプリを作成しております。
1か月程度の初心者です。
以下でDLLのメソッドを呼びたいのですが、「DLL 'test.dll' の 'Hello' というエントリポイントが見つかりません。 」というエラーになってしまいます。
なぜでしょうか?
すみません。ご教授お願い致します。

作成したDLLのソース
using System;
using System.Collections.Generic;
using System.Text;

namespace test
{
public class Class1
{
public string Hello()
{
return "Hello!";
}

}
}

DLLを呼ぶプロジェクトのソース。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;


public partial class _Default : System.Web.UI.Page
{
[DllImport("test.dll")]
private extern static bool Hello();

protected void Page_Load(object sender, EventArgs e)
{
Hello();



}
}



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-08 20:36
引用:

SANBさんの書き込み (2008-12-08 19:47) より:

以下でDLLのメソッドを呼びたいのですが、「DLL 'test.dll' の 'Hello' というエントリポイントが見つかりません。 」というエラーになってしまいます。
なぜでしょうか?


エラーのとおりでしょう。 この test.dll は C の静的ライブラリか何かでしょうか? DumpBin か何かでどんな名前でエクスポートされているか確認しましょう。

まさかとは思いますが test.dll は .NET のクラス ライブラリ (DLL) アセンブリだったりしませんよね? (たまに混同している方がいるもので念のため確認)。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 2008-12-09 10:34
すみません。おっしゃる通り.NETで作ったライブラリです。
C等はやったことがないので他のDLLとの違いがわからないのですが・・・
ちょっと調べたところ、CなどのDLLはdumpbinで確認するみたいですね。
一応今回のもdumpbinで確認してみたのですが、確認できませんでした。
混同しているので違いについて調べてみます。
なかむら
ベテラン
会議室デビュー日: 2008/11/11
投稿数: 67
お住まい・勤務地: 福岡
投稿日時: 2008-12-09 10:42
.NET アセンブリなら、Web アプリのプロジェクトが test.dll を参照すれば、
コード:
test.Class1 c = new test.Class1();
string result = c.Hello();


という風にメソッドを呼べると思いますが。

Visual Studio のソリューションエクスプローラー上で
Web アプリのプロジェクトを右クリックし、
「参照の追加」を選んで test.dll を追加してみて下さい。

_________________
Nakamura Blog
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 2008-12-09 11:32
できました!ありがとうございます。
これからテストではない方を実装していきたいと思います。
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 2008-12-09 19:05
続けてもう一つ質問なのですが、引数の戻り値を取得する場合にはどのように
したらよろしいでしょうか?

作成したDLLのソース
public class Class1
{
public string Hello(string prm)
{
prm ="戻り値"
}
}

メソッド呼び出し
test.Class1 c = new test.Class1();
string callprm
c.Hello(callprm);

こんな感じでやってみたのですができませんでした。。。





[ メッセージ編集済み 編集者: SANB 編集日時 2008-12-09 19:05 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-12-09 20:04
引用:

SANBさんの書き込み (2008-12-09 19:05) より:

続けてもう一つ質問なのですが、引数の戻り値を取得する場合にはどのように
したらよろしいでしょうか?


引数と戻り値は別物なわけですが、呼び出し先で変更された引数の値を取得という意味であれば、引数には out か ref の属性を付ける必要があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
SANB
常連さん
会議室デビュー日: 2008/11/17
投稿数: 25
投稿日時: 2008-12-10 13:55
ありがとうございます!
以下でできました。
refだと未割り当ての〜〜エラーになってしまいました。
参照型だからでしょうか。。。

作成したDLLのソース
public class Class1
{
public string Hello(out string prm)
{
prm ="戻り値"
}
}

メソッド呼び出し
test.Class1 c = new test.Class1();
string callprm
c.Hello(out callprm);

スキルアップ/キャリアアップ(JOB@IT)