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

ナビゲーションに移動 検索に移動
編集の要約なし
76行目: 76行目:


== サンプルコード ==
== サンプルコード ==
C++ DLLの作成方法は[[http://raspberrypi/mediawiki/index.php/DLLを作成する(MFC)#DLLの作成方法(defファイルを作成する)|コチラを参照]]する。<br>
C++ DLLの作成方法は[[DLLを作成する(MFC)|コチラを参照]]する。<br>
念のため、下記にもC++ DLLを記述する。<br>
念のため、下記にもC++ DLLを記述する。<br>
  <source lang="c++">
  <source lang="c++">
82行目: 82行目:
   
   
  double __stdcall SampleFunc01(int a);
  double __stdcall SampleFunc01(int a);
void  __stdcall SampleFunc02(int a, char *pstr)
void  __stdcall SampleFunc03(int a, char *pstr)
  </source>
  </source>
  <source lang="c++">
  <source lang="c++">
90行目: 92行目:
     printf(--<SampleDll:SampleFunc01>--\r\n");
     printf(--<SampleDll:SampleFunc01>--\r\n");
     printf("a = %d\r\n", a);
     printf("a = %d\r\n", a);
     printf("-------------------------\r\n");
     printf("---------------------------\r\n");
   
   
     return 3.14;
     return 3.14;
}
void __stdcall Sample02(int a, char *pstr)
{
    printf("--<SampleDll:SampleFunc02>--\r\n");
    printf("[%d] %s\r\n", a, str);
    printf("-----------------------------\r\n");
}
void __stdcall SampleFunc03(int a, char *pstr)
{
    printf("--<SampleDll:SampleFunc03>--\r\n");
    printf("[%d] %s\r\n", a, str);
    sprintf_s(str, 256, "C++ DLL側から文字列を返す場合は、StringBuilderクラスを使用する");
    printf("------------------------\r\n");
  }
  }
  </source>
  </source>
103行目: 120行目:
           ; 公開する関数名をリストアップ
           ; 公開する関数名をリストアップ
  SampleFunc01  @1
  SampleFunc01  @1
          SampleFunc02  @2
          SampleFunc03  @3
  </source>
  </source>
<br><br>
<br><br>
122行目: 141行目:
       [DllImport("SampleDLL.dll")]
       [DllImport("SampleDLL.dll")]
       private static extern double SampleFunc01(int a);
       private static extern double SampleFunc01(int a);
      [DllImport("SampleDLL.dll", CharSet = CharSet.Unicode)]
      // C++ DLL側の文字コードがUnicodeの場合は"CharSet = CharSet.Unicode"と明示的に指定する
      private static extern void SampleFunc02(int a, string str);
      [DllImport("SampleDLL.dll", CharSet = CharSet.Unicode)]
      // C++ DLL側の文字コードがUnicodeの場合は"CharSet = CharSet.Unicode"と明示的に指定する
      private static extern void SampleFunc03(int a, StringBuilder str);
   
   
       static void Main(string[] args)
       static void Main(string[] args)
       {
       {
           var dRet= Sample01(1);
           var dRet= SampleFunc01(1);
           Console.WriteLine(dRet);
           Console.WriteLine(dRet);
           Console.WriteLine();
           Console.WriteLine();
          var str = "string型で文字列を渡すことができます。";
          SampleFunc02(2, str);
          var strb = new System.Text.StringBuilder(256);
          strb.Append("文字列のバッファを渡す場合は StringBuilder クラスで受け渡します。");
          SampleFunc03(3, strb);
          Console.WriteLine(strb);
   
   
           Console.ReadKey();
           Console.ReadKey();
匿名利用者

案内メニュー