DOBON.NETプログラミング道掲示板

■34102 / 3階層)  参照dllへの文字列引数をutf8で渡したい。
□投稿者/ 魔界の仮面弁士 大御所(1190回)-(2019/01/16(Wed) 17:05:20)
  • アイコン2019/01/16(Wed) 17:08:10 編集(投稿者)

    No34101に返信(ukotsさんの記事)
    > 今回の問題のdllの仕様は下記のpdfに載っています

    簡体は読み解けないので、コード部と英語部分だけを
    流し読みしてみただけですが…エンコーディングについては
    最初の NLPIR_Init API で指定するのでしょうか。

    簡体字、繁体字、UTF-8 の 3 種があるようですが(既定では簡体字)、
    残念ながら .NET Framework では Marshal.PtrToStringXXX メソッドの
    UTF-8 版が使えないという罠。
    https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.interopservices.marshal.ptrtostringutf8


    となるとやはり、System.Text.Encoding を使って
    自前で処理する必要があると思います。


    > NLPIR_ParagraphProcess

    この API ですね。

    const char * NLPIR_ParagraphProcess(const char *sParagraph, int bPOStagged = 1);

    だとすれば、こんな手順でどうでしょう。


    (1) NLPIR_ParagraphProcess API の戻り値を As IntPtr で宣言しなおす

    (2) 戻り値のバッファ長を得るため、kernel32.dll の lstrlenA API を呼び出す
     Private Declare Ansi Function lstrlenA Lib "kernel32" (ByVal p As IntPtr) As Integer

    (3) 受信バッファとして、その長さの Byte 型 1 次元配列を確保する

    (4) 確保したバッファに、Marshal.Copy( IntPtr, Byte(), Integer, Integer) メソッドで複写

    (5) System.Text.Encoding.UTF8.GetString メソッドで文字列に変換する



    なお、受信した文字列バッファの解放処理をどうすべきかは、
    読み解けませんでした。

    NLPIR_Exit を呼び出すとワーキングバッファも解放されるようですが、
    戻り値で返される文字列のメモリ解放もこれですかね…?
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: 参照dllへの文字列引数をutf8で渡したい。 /ukots →Re[4]: 参照dllへの文字列引数をutf8で渡したい。 /ukots
 
上記関連ツリー

Nomalアイコン 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/12(Sat) 11:01) #34090
Nomalアイコン Re[1]: 参照dllへの文字列引数をutf8で渡したい。 / Hongliang (19/01/12(Sat) 11:05) #34091
│└Nomalアイコン Re[2]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/12(Sat) 13:25) #34092
│  └Nomalアイコン Re[3]: 参照dllへの文字列引数をutf8で渡したい。 / Hongliang (19/01/12(Sat) 17:48) #34093
│    └Nomalアイコン Re[4]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/13(Sun) 10:29) #34095
│      └Nomalアイコン Re[5]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/15(Tue) 15:40) #34097
Nomalアイコン Re[1]: 参照dllへの文字列引数をutf8で渡したい。 / 魔界の仮面弁士 (19/01/15(Tue) 16:48) #34099
  └Nomalアイコン Re[2]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/16(Wed) 11:25) #34101
    └Nomalアイコン 参照dllへの文字列引数をutf8で渡したい。 / 魔界の仮面弁士 (19/01/16(Wed) 17:05) #34102 ←Now
      └Nomalアイコン Re[4]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/17(Thu) 10:16) #34103
        └Nomalアイコン Re[5]: 参照dllへの文字列引数をutf8で渡したい。 / 魔界の仮面弁士 (19/01/17(Thu) 12:42) #34104
          └Nomalアイコン Re[6]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/17(Thu) 17:03) #34105
            └Nomalアイコン Re[7]: 参照dllへの文字列引数をutf8で渡したい。 / 魔界の仮面弁士 (19/01/17(Thu) 19:41) #34106
              └Nomalアイコン Re[8]: 参照dllへの文字列引数をutf8で渡したい。 / ukots (19/01/18(Fri) 09:21) #34107 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -