スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2008 Express Edition C++で作ったDLLをC#で使用する!

Linuxの通信について触れたサイトはCで書かれている事がおおい。
C#で開発している場合ソースをそのまま試したくても試せない。
よって次の手順を踏むことにした。

C言語 → VC++でDLL化 → C#でライブラリを使う

早速DLLからの一連の流れを試すことに。
参考サイトは多いもののすべての手順を追ってくれるものが無かったので記載しときます。

【DLLの作成】
・VC++2008ExpressEditionを立ち上げる
・「ファイル」→「新規」→「プロジェクト」
・「Win32」→「Win32コンソールアプリケーション」
・「プロジェクト名」入力
・ 完了を押さずに次ぎへ>「DLL」と「空のプロジェクト」をチェック


DEFファイルというものが必要だそうだ。これははCPPとして追加して拡張子をdefに変える。これがまず分からなかった!
その後、プロジェクトのプロパティの「構成プロパティ」>「リンカ」>「入力」>「モジュール定義ファイル」
にて↑のファイルを指定。「defファイル名.def」のように書き込めばOK

これでビルドすればC# で読み込めるDLLが完成する。

CPPの中身は
__declspec (dllexport) int __stdcall addnum(int a, int b)
{
return a + b;
}

と書いておく。

DEFファイルは
LIBRARY “TESTDLL”
EXPORTS
addnum

こんな感じ。関数が増えたら下にずらずら関数名が増えていくそうな。



【C#側の読み取り】
参照設定に追加しようとすると有効なアセンブリじゃない!とかCOMコンポネートなの?などと怒られる。
しっかりしてるヤツだ。
っけ。
よって参照などは無視して、できたライブラリを実行ファイル直下に置いてやる。デバッグフォルダなりbinフォルダなり自分の環境にあった場所に移動してね。

そしてC#のソースにまず名前空間を書き加える。
using System.Runtime.InteropServices;

でもって
[DllImport("TESTDLL.dll")]
public static extern int addnum(int a, int b);

と記載すると問題なく使えるようになる。
めでたしめでたし。


ねよっと。

コメントの投稿

非公開コメント

プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。