回答編集履歴

4

修正

2021/10/07 15:20

投稿

退会済みユーザー
test CHANGED
@@ -20,4 +20,4 @@
20
20
 
21
21
  1、2どちらの場合も、コピーした文字列の長さを返したほうがいいでしょう。
22
22
 
23
- 個人的には、1の方が解放用の関数用意しなくていので良いと思います。
23
+ 個人的には、1の方が解放用の関数用意しなくて済みますし、Cの標準関数の実装に近いので好みです。

3

修正

2021/10/07 15:20

投稿

退会済みユーザー
test CHANGED
@@ -16,4 +16,8 @@
16
16
 
17
17
  1であれば、CppCode側でバッファ確保する必要はないでしょうし、呼び出し側からバッファのサイズも引数で渡すべきです。
18
18
 
19
- 2であれば、バッファの文字列の長さ返すなりたほうがしょうし、CppCodeで確保したメモリ解放用の関数も必要でしょう
19
+ 2であれば、C#側でLPWStr指定てるのはおかしいです。また、CppCodeで確保したメモリ解放用の関数も用意する必要があります
20
+
21
+ 1、2どちらの場合も、コピーした文字列の長さを返したほうがいいでしょう。
22
+
23
+ 個人的には、1の方が解放用の関数用意しなくていいので良いと思います。

2

修正

2021/10/07 15:14

投稿

退会済みユーザー
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- 0. 呼び出し側でバッファ確保するのが前提
9
+ 0. 呼び出し側でバッファ確保するのが前提
10
10
 
11
11
  0. CppCode側でバッファ確保するのが前提
12
12
 
@@ -14,6 +14,6 @@
14
14
 
15
15
  どちらなのでしょう?サンプルコードを見る限り、両方でバッファ確保しようとしてますが。
16
16
 
17
- 1であれば、CppCode側でバッファ確保する必要はないでしょうし、バッファのサイズも引数で渡すべきです。
17
+ 1であれば、CppCode側でバッファ確保する必要はないでしょうし、呼び出し側からバッファのサイズも引数で渡すべきです。
18
18
 
19
19
  2であれば、バッファの文字列の長さを返すなりしたほうがいいでしょうし、CppCodeで確保したメモリ解放用の関数も必要でしょう。

1

修正

2021/10/07 14:25

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,4 @@
1
- まずDllImportの定義自体が引数の数が違ってるし、呼び出し規約も書いてないし、voidなのにreturnのマーシャリング定義してるし、色々間違ってる気がします。
2
-
3
- あと、[ネイティブ相互運用性のベスト プラクティス](https://docs.microsoft.com/ja-jp/dotnet/standard/native-interop/best-practices)では、StringBuilderでの受け渡しは回避すべき項目として記述されています。
1
+ まずDllImportの定義自体が引数の数が違ってるし、呼び出し規約も書いてないし、voidなのにreturnのマーシャリング定義してるし、色々間違ってる気がします。あと、[ネイティブ相互運用性のベスト プラクティス](https://docs.microsoft.com/ja-jp/dotnet/standard/native-interop/best-practices)では、StringBuilderでの受け渡しは回避すべき項目として記述されています。
4
2
 
5
3
 
6
4