「ライブラリの基礎 - C++DLL」の版間の差分
ナビゲーションに移動
検索に移動
→サンプルコード
編集の要約なし |
|||
76行目: | 76行目: | ||
== サンプルコード == | == サンプルコード == | ||
C++ DLLの作成方法は[[ | 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= | 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(); |