Portál AbcLinuxu, 9. května 2025 23:40
fread
a fwrite
ze stdio.h
? V C# je lze zadeklarovat takto:
[DllImport("msvcrt.dll", SetLastError=true)] static extern IntPtr fread(byte[] buffer, IntPtr size, IntPtr count, IntPtr stream); [DllImport("msvcrt.dll", SetLastError=true)] static extern IntPtr fwrite(byte[] buffer, IntPtr size, IntPtr count, IntPtr stream);
stream
vlastně zač. Pokud je to ukazatel nebo má velikost ukazatele, lze návratový typ deklarovat jako IntPtr
.
Z C# jsem si schopen zavolat funkci OpenXmlBridge, avšak samotným zavoláním se program logicky zastaví...Tomu nerozumím, když s tím pracujete asynchronně. Mj. deklarace pro funkce
ReadFileEx
a WriteFileEx
lze najít na serveru pinvoke.net (jsou v knihovně kernel32.dll).
[DllImport("Moje.dll", SetLastError = true)] private static extern SafeFileHandle OpenXMLBridge(); //Pak se s tím dá pracovat přes SafeFileHandle handler = OpenXMLBridge(); FileStream fs = new FileStream(handler, FileAccess.ReadWrite, 4096, true);Průšvih je, že mi to padá při druhém čtení či zápisu, při fs.Close() mi to padá. Ale... to snad již nějak dořeším.
OpenXMLBridge
funkce z té DLL knihovny v C a nevrací klasický windowsovský handle? Pokud ano, tak byste tam měl mít IntPtr:
[DllImport("Moje.dll", SetLastError = true)] private static extern IntPtr OpenXMLBridge();a pracovalo by se s tím takto:
var handle = new SafeFileHandle(OpenXMLBridge(), true); var fs = new FileStream(handle, FileAccess.ReadWrite, 4096, true);
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.