解決済みの質問
C#で作成したDLLをC#から呼出したいのですが、うまくいきません。
// トリガ
private void button2_Click(object sender, EventArgs e)
{
string ans = DLL.moji();
MessageBox.Show(ans);
}
// DLL呼出し用クラス
class DLL
{
[DllImport("LibCsharp.dll")]
public static extern string moji();
}
// DLL(LibCsharp.dll内容)
class AddClass
{
public static string moji()
{
return ("テスト");
}
}
上記で実行すると「EntryPointNotFoundException DLL 'LibCsharp.dll' の 'moji' というエントリ ポイントが見つかりません。」となります。
プロジェクトの参照設定にはLibCsharpを追加しています。
Web上で調べたのですが、解決には至っておりません。
申し訳ありませんが、よろしくお願いします。
投稿日時 - 2010-02-25 16:30:06
#1です。
私もc#で簡易な独自ライブラリを構築しようとしていたので調べてみました。
結果として参照の追加でdllを直接、指定するだけで使用可能だと分かりました。
(「参照設定」右クリック→「参照の追加」→「参照」タブ選択→DLLを選択)
まず基本的な知識としてdllには3種類あると覚えて下さい。
・レガシー(古い遺産)dll
・active-x dll
・.net dll
私はレガシーdll時代の知識しかありませんでした。
この頃のdllを使用するためには、dll本体以外に以下のファイルが必要でした。
・ヘッダファイル
・ライブラリ(lib)ファイル
・defファイル(場合による)
c#で作られたdllは[.net dll]となり、[.net freamwork]上で動作する各種の言語で使用出来るようにするため、煩わしいlibファイルやヘッダファイル等を削除する方向でdllが進化しているのだと思われます。
ネット検索をしていて見つけたのですが、[.net dll]で作成されたFTPクライアントのライブラリがありました。
(.NET用FTPクラスライブラリ (TKFP.DLL) )
どの言語で作られているのか分かりませんが、[.net dll]で作られているため、c#およびvbで使用可能のようです。
追加したdll内に含まれているクラスや関数に対してオブジェクトブラウザで概要が表示出来るようにXMLファイルで概要を記述出来るようなのですが、詳細まで調べることが出来ませんでした。
(申し訳ありません。)
投稿日時 - 2010-02-25 21:51:03
補足
using LibCsharp;
上記を追加することで確認できました。
ありがとうございました。
投稿日時 - 2010-03-02 16:34:04
お礼
応答が遅くなり、大変申し訳ありません。
>結果として参照の追加でdllを直接、指定するだけで使用可能だと分かりました。
>(「参照設定」右クリック→「参照の追加」→「参照」タブ選択→DLLを選択)
できれば、呼出しができた時のサンプルを載せていただけるとありがたいです。
最初の質問にも記載しましたが、参照設定に追加した場合の動作が確認できておりません。
>プロジェクトの参照設定にはLibCsharpを追加しています。
>まず基本的な知識としてdllには3種類あると覚えて下さい。
いろいろ教えていただき、ありがとうございます。
サンプルのほう、よろしくお願いいたします。
投稿日時 - 2010-03-02 16:30:04
3人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(5件中 1~5件目)
参考になりますか?
クラスライブラリの作成と使用方法
http://www.geocities.jp/gakaibon/tips/csharp2008/classlibrary-make.html
投稿日時 - 2010-02-25 17:45:54
お礼
ありがとうございます。
上記URLを参照することで、自作のものを使用することができました。
// トリガ
using LibCsharp;
private void button2_Click(object sender, EventArgs e)
{
string ans = AddClass.moji();
MessageBox.Show(ans);
}
ただ、自作ではないもの(DLLしかない状態)で呼び出す方法もご教授いただけると大変助かります。
ひょっとして同じ方法でできるのでしょうか。
投稿日時 - 2010-02-25 18:59:06
#1です。
駄目なら、あとはネームスペースかな?
[AddClass]クラスは、なにかのネームスペース内で宣言されていると思います。
仮に[MyNameSpace]とします。
それを、[button2_Click]関数が記述されているソースコードの先頭で、[using MyNameSpace]と記述する必要があったのでは無かったかと思います。
投稿日時 - 2010-02-25 17:42:17
お礼
ありがとうございます。
bluecampusさんの紹介してくださったURLに同様の内容がありました。
bluecampusさんにもお願いしていますが、C#で作成された単体のDLLを呼び出す方法もご教授いただけるとありがたいです。
重ね重ね、ご迷惑おかけします。
投稿日時 - 2010-02-25 19:01:29
まず、試してはいない事を念頭に置いて下さい。
[LibCsharp.dll]の[moji]関数は[AddClass]クラスのメンバ関数ですよね。
呼び出す側は[moji]だけで呼び出そうとしていますが、それが[AddClass]内にあっては直接呼び出せないのではないかと思います。
以下で呼び出せるのではないかと思うのですが。。。
---------
// トリガ
[DllImport("LibCsharp.dll")]
private void button2_Click(object sender, EventArgs e)
{
string ans = AddClass.moji();
MessageBox.Show(ans);
}
投稿日時 - 2010-02-25 17:07:54
お礼
上記サンプルの通り試してみましたが、エラーが発生してしまいました。
名前 'AddClass' は現在のコンテキスト内に存在しません。
引き続きご助言いただければありがたいです。
投稿日時 - 2010-02-25 17:24:12
OKWaveのオススメ
おすすめリンク