「ライブラリの基礎 - C++DLL」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
73行目: 73行目:
|}
|}
</center>
</center>
<br><br>
== サンプルコード ==
C++ DLLの作成方法は[[http://raspberrypi/mediawiki/index.php/DLLを作成する(MFC)#DLLの作成方法(defファイルを作成する)|コチラを参照]]する。<br>
念のため、下記にもC++ DLLを記述する。<br>
<source lang="c++">
SampleDLL.h
double __stdcall SampleFunc01(int a);
</source>
<source lang="c++">
SampleDll.cpp
 
double __stdcall SampleFunc01(int a)
{
    printf(--<SampleDll:SampleFunc01>--\r\n");
    printf("a = %d\r\n", a);
    printf("-------------------------\r\n");
    return 3.14;
}
</source>
<source lang="c++">
SampleDll.def  // モジュール定義ファイル
LIBRARY SampleDll
EXPORTS
          ; 公開する関数名をリストアップ
  SampleFunc01  @1
</source>
<br><br>
次に、
<source lang="c#">
using System;
using System.Runtime.InteropServices;
namespace SampleEXE
{
    class Program
    {
      /// <summary>
      /// 最も基本的な関数のインポート例
      /// </summary>
      /// <param name="a">4 バイト符号付き整数を指定します。</param>
      /// <returns>倍精度浮動小数を返します。</returns>
      [DllImport("SampleDLL.dll")]
      private static extern double SampleFunc01(int a);
      static void Main(string[] args)
      {
          var dRet= Sample01(1);
          Console.WriteLine(dRet);
          Console.WriteLine();
          Console.ReadKey();
      }
    }
}
</source>
<br>
DllImport属性には、DLLファイルのパスを指定する以外に次のような引数を与えることもできる。<br>
これ他にも細かい設定をするための引数が用意されているので、DllImportAttributeクラスで検索すること。<br>
{| class="wikitable"
|-
! 名称 !! 説明
|-
| CallingConvention || エントリポイントの呼び出し規約を明示的に指定できる。<br>指定なしの場合は__stdcallとなる。
|-
| CharSet || 文字列パラメータをメソッドにマーシャリングし、名前マングルを制御する方法を指定する。<br>文字コードの相互変換する時に指定する。
|-
| EntryPoint || 呼び出すDLLエントリポイントの名前または序数を指定する。<br>DLLの関数名とC#上で使用する関数名を異なる名前にする時に指定する。
|}
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:C_Sharp]]
[[カテゴリ:C_Sharp]]
匿名利用者

案内メニュー