c++で作成したDLLをc#から使う際の型指定について教えてください。
仕様
パスワード(平文)→rc4→base64で暗号化されたパスワードをdllを使って複合化しています。
vb.netから呼び出した場合はうまく複合化できるのですがc#から呼び出した場合に
パスワードの文字数が4の倍数の時に後ろにゴミが残ります。
例
パスワード:Pass
暗号化後:SvUYDw==
の場合
vb.netで複合化:Pass
c#で複合化:Pass\u0010
となります。
c++のプログラムソースは分からないのですが
関数の定義は
c++
1EXPORT LONG WINAPI hogehoge( 2unsigned char* Str, //!< [in] 復号対象文字列 3char* pPass, //!< [in] パスフレーズ文字列 4char* pOut //!< [out] 出力(変換)文字列
となっているようです。
vb.netでは
cb.net
1Public Declare Function hogehoge Lib "choge.dll" Alias "hogehoge" _ 2(<MarshalAs(UnmanagedType.LPStr)> ByVal Str As String, _ 3<MarshalAs(UnmanagedType.LPStr)> ByVal pPass As String, _ 4ByVal pOut As String) As Integer 5 6ret = hogehoge(Str, pPass, pOut)
c#では
c#
1[DllImport("choge.dll", EntryPoint = "hogehoge")] 2public static extern int hogehoge([MarshalAs(UnmanagedType.LPStr)] string Str 3 , [MarshalAs(UnmanagedType.LPStr)] string pPass 4 , [MarshalAs(UnmanagedType.LPStr), Out] StringBuilder pOut); 5 6ret = hogehoge(Str, pPass, pOut);
としています。
c#の場合にパスワードが4の倍数桁でゴミが残る原因がわかる方がいましたら教えていただけないでしょうか。
回答2件
あなたの回答
tips
プレビュー