
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上で調べたのですが、解決には至っておりません。
申し訳ありませんが、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
#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ファイルで概要を記述出来るようなのですが、詳細まで調べることが出来ませんでした。
(申し訳ありません。)
応答が遅くなり、大変申し訳ありません。
>結果として参照の追加でdllを直接、指定するだけで使用可能だと分かりました。
>(「参照設定」右クリック→「参照の追加」→「参照」タブ選択→DLLを選択)
できれば、呼出しができた時のサンプルを載せていただけるとありがたいです。
最初の質問にも記載しましたが、参照設定に追加した場合の動作が確認できておりません。
>プロジェクトの参照設定にはLibCsharpを追加しています。
>まず基本的な知識としてdllには3種類あると覚えて下さい。
いろいろ教えていただき、ありがとうございます。
サンプルのほう、よろしくお願いいたします。
No.4
- 回答日時:
ありがとうございます。
上記URLを参照することで、自作のものを使用することができました。
// トリガ
using LibCsharp;
private void button2_Click(object sender, EventArgs e)
{
string ans = AddClass.moji();
MessageBox.Show(ans);
}
ただ、自作ではないもの(DLLしかない状態)で呼び出す方法もご教授いただけると大変助かります。
ひょっとして同じ方法でできるのでしょうか。
No.3
- 回答日時:
#1です。
駄目なら、あとはネームスペースかな?
[AddClass]クラスは、なにかのネームスペース内で宣言されていると思います。
仮に[MyNameSpace]とします。
それを、[button2_Click]関数が記述されているソースコードの先頭で、[using MyNameSpace]と記述する必要があったのでは無かったかと思います。
ありがとうございます。
bluecampusさんの紹介してくださったURLに同様の内容がありました。
bluecampusさんにもお願いしていますが、C#で作成された単体のDLLを呼び出す方法もご教授いただけるとありがたいです。
重ね重ね、ご迷惑おかけします。
No.1
- 回答日時:
まず、試してはいない事を念頭に置いて下さい。
[LibCsharp.dll]の[moji]関数は[AddClass]クラスのメンバ関数ですよね。
呼び出す側は[moji]だけで呼び出そうとしていますが、それが[AddClass]内にあっては直接呼び出せないのではないかと思います。
以下で呼び出せるのではないかと思うのですが。。。
---------
// トリガ
[DllImport("LibCsharp.dll")]
private void button2_Click(object sender, EventArgs e)
{
string ans = AddClass.moji();
MessageBox.Show(ans);
}
上記サンプルの通り試してみましたが、エラーが発生してしまいました。
名前 'AddClass' は現在のコンテキスト内に存在しません。
引き続きご助言いただければありがたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*.exeと異なるフォルダのDLLを...
-
メイクファイルからdllを生成す...
-
VB6.0(SP6)にて開発を行なって...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
math.hに含まれる関数が使えない
-
アプリケーションのDLLファイル...
-
DLLファイルの逆コンパイラにつ...
-
printfなど、標準関数のソース...
-
visual studio2019でデバッグが...
-
Visual studio2017で、2回目の...
-
C言語でヘッダファイルにグロー...
-
キーの自動入力
-
ソリューションをまたがるデバ...
-
visual studio 2008 のデバッグ...
-
Excelのエラーで困ってます。
-
C#で char型とstring型の比較で...
-
適切な変換関数が存在しない???
-
Visual Studio 2010 のC#で…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0(SP6)にて開発を行なって...
-
ASP.NETのDLL入れ替えについて
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
res://ieframe.dll/について
-
C# DLL エントリ ポイントが...
-
C++のdllの作り方を教えてく...
-
VC++6.0 でのライブラリ参照方法
-
ファイルをvbaで圧縮したいので...
-
vb6で作成した画面が処理に時間...
-
指定された引数が有効範囲にな...
-
VBAエディタのコード画面で、カ...
-
ptipi.dll に関し未解決問題
-
[マインクラフト] Javaが64bit...
-
VB.NET xdoc2txtをつかってPDF...
-
M365にアップデートしてからコ...
-
プロシージャエントリポイント ...
-
WIN10で常にフォームを手前に
-
エクセル マクロで指定フォルダ...
-
メイクファイルからdllを生成す...
おすすめ情報