C#よりC/C++で作成した関数を呼び出していますが、英文字の配列を渡すうえでは何もエラーが発生しませんが、日本語だと呼び出した瞬間エラーとなり、「システム コールに渡されるデータ領域が小さすぎます。 (HRESULT からの例外: 0x8007007A)」とのエラーメッセージを発します。原因と対策を教えてください。
概略のコードの内容は以下の通りです。
呼出側:
private static extern uint DLLGetFiles([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]string[] stA); string[] stFiles = new string[3]; stFiles[0] = "サンプル.mp4"; stFiles[1] = "ガイド説明.pdf"; stFiles[2] = "動画.wmv"; unRet = DLLGetFiles(stFiles.Length, stFiles);
呼び出される側:
DWORD _stdcall DLLGetFiles(int, LPSTR *) ; EXTERN_C DWORD __stdcall DLLGetFiles( int nFNum, // (I) 文字列数 LPSTR *lpszFName, // (I) 受領文字列 ) {
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/01/14 09:42 編集
2021/01/14 10:36
退会済みユーザー
2021/01/17 22:48
退会済みユーザー
2021/01/18 01:20 編集