WinAPI 関数を使用して、C# で OLE ファイルを作成しました。WinAPI 関数は次のとおりです。
[DllImport("ole32.dll")]
public static extern int OleCreateFromFile(
[In] ref Guid rclsid,
[MarshalAs(UnmanagedType.LPWStr)] string lpszFileName,
[In] ref Guid riid, uint renderopt,
[In] IntPtr pFormatEtc,
IOleClientSite pClientSite,
IStorage pStg,
[MarshalAs(UnmanagedType.IUnknown)] out object ppvObj);
以下のように、C# アプリケーションでこの関数を使用しました。
hResult = OleAPI.OleCreateFromFile(ref clsid,
sourceFileFullPath,
ref IID_IOleObject,
(uint)OLERENDER.OLERENDER_DRAW,
IntPtr.Zero,
pOleClientSite,
pStorage,
out pOleObjectOut);
機能は完璧に動作します。ただし、ファイルのファイル名の長さが 140 の場合、OLE ファイルの作成に失敗しました。hResult の戻り値は -2147467259 です。
sourceFileFullPath="C:\Users\Administrator\AppData\Local\Temp\TmpTzStore1\pju3wswj.jmq\000008F6\CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendar5sRepeatx"の値
ファイル名 (CalendarRepeddsfsfdsfsfat344Issue5sdfdfsfsfdsfdsfsdsdfdsfsf00kbCalendarRepeatIssue500kbCalendarRepeatIssue500kbCalendarRepeatIssue500kb.xlsx) の長さは 140 です。
しかし、ファイル名を 120 にトリミングすると、機能しました。
OLE ファイルのファイル名の長さに制限があるかどうか知りたいです。さまざまなアプリケーションファイル(doc、docx、txt、pdf ...)で試したので。結果はファイルごとに異なりました。
この API がサポートする正確なファイル名の長さはわかりません。それともOS依存?Windows Server 2008 を使用しています。
ありがとうプラカシュ