Try to fix bugs.

This commit is contained in:
Bruce
2026-04-10 10:50:22 +08:00
parent 19757502ae
commit f563f97f12
17 changed files with 231 additions and 332 deletions
BIN
View File
Binary file not shown.
+8 -4
View File
@@ -17,15 +17,15 @@ namespace PriFileFormat
} }
public override bool CanRead public override bool CanRead
{ {
get { return true; } get { return comStream != null; }
} }
public override bool CanSeek public override bool CanSeek
{ {
get { return true; } get { return comStream != null; }
} }
public override bool CanWrite public override bool CanWrite
{ {
get { return true; } get { return comStream != null; }
} }
public override long Length public override long Length
{ {
@@ -142,6 +142,10 @@ namespace PriFileFormat
comStream.SetSize (value); comStream.SetSize (value);
} }
} }
~ComStreamWrapper () { comStream = null;} public override void Close ()
{
base.Close ();
comStream = null;
}
} }
} }
-1
View File
@@ -48,7 +48,6 @@ namespace PriFileFormat
_dataItems?.Clear (); _dataItems?.Clear ();
_dataItems = null; _dataItems = null;
} }
~DataItemSection () { ClearData (); }
} }
public struct DataItemRef public struct DataItemRef
-213
View File
@@ -1,213 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;
namespace PriFileFormat
{
/// <summary>
/// 树节点接口
/// </summary>
public interface ITreeNode: IDisposable, IEnumerable<ITreeNode>
{
string Name { get; set; }
string Value { get; set; }
ITreeNode Parent { get; set; }
IList<ITreeNode> Children { get; }
ITreeNode AddChild (string name, string value);
IEnumerable<ITreeNode> DescendantsAndSelf ();
ITreeNode Find (string name);
IEnumerable<ITreeNode> FindAll (string name);
}
/// <summary>
/// 树节点实现
/// </summary>
[Serializable]
public class TreeNode: ITreeNode
{
// 节点基本属性
public string Name { get; set; }
public string Value { get; set; }
// 父节点引用
[XmlIgnore]
public TreeNode Parent { get; set; }
ITreeNode ITreeNode.Parent
{
get { return Parent; }
set { Parent = (TreeNode)value; }
}
// 子节点列表
[XmlArray ("Children")]
[XmlArrayItem ("Node")]
public IList<TreeNode> Children { get; set; }
IList<ITreeNode> ITreeNode.Children
{
get
{
List<ITreeNode> list = new List<ITreeNode> ();
foreach (TreeNode node in Children)
{
list.Add (node);
}
return list;
}
}
public TreeNode ()
{
Name = "";
Value = "";
Children = new List<TreeNode> ();
Parent = null;
}
public TreeNode (string name, string value)
{
Name = name;
Value = value;
Children = new List<TreeNode> ();
Parent = null;
}
/// <summary>
/// 添加子节点
/// </summary>
public TreeNode AddChild (string name, string value)
{
TreeNode child = new TreeNode (name, value);
child.Parent = this;
Children.Add (child);
return child;
}
ITreeNode ITreeNode.AddChild (string name, string value)
{
return AddChild (name, value);
}
/// <summary>
/// 深度优先遍历节点,包括自身
/// </summary>
public IEnumerable<TreeNode> DescendantsAndSelf ()
{
yield return this;
foreach (TreeNode child in Children)
{
foreach (TreeNode desc in child.DescendantsAndSelf ())
{
yield return desc;
}
}
}
IEnumerable<ITreeNode> ITreeNode.DescendantsAndSelf ()
{
foreach (TreeNode n in DescendantsAndSelf ())
{
yield return n;
}
}
/// <summary>
/// 查找第一个匹配节点
/// </summary>
public TreeNode Find (string name)
{
foreach (TreeNode n in DescendantsAndSelf ())
{
if (n.Name == name)
return n;
}
return null;
}
ITreeNode ITreeNode.Find (string name)
{
return Find (name);
}
/// <summary>
/// 查找所有匹配节点
/// </summary>
public IEnumerable<TreeNode> FindAll (string name)
{
foreach (TreeNode n in DescendantsAndSelf ())
{
if (n.Name == name)
yield return n;
}
}
IEnumerable<ITreeNode> ITreeNode.FindAll (string name)
{
foreach (TreeNode n in FindAll (name))
{
yield return n;
}
}
#region IEnumerable<TreeNode>
public IEnumerator<TreeNode> GetEnumerator ()
{
return Children.GetEnumerator ();
}
IEnumerator IEnumerable.GetEnumerator ()
{
return GetEnumerator ();
}
#endregion
#region IEnumerable<ITreeNode>
IEnumerator<ITreeNode> IEnumerable<ITreeNode>.GetEnumerator ()
{
foreach (TreeNode child in Children)
{
yield return child;
}
}
#endregion
#region XML
public void SaveToXml (string filePath)
{
XmlSerializer serializer = new XmlSerializer (typeof (TreeNode));
using (StreamWriter writer = new StreamWriter (filePath, false, System.Text.Encoding.UTF8))
{
serializer.Serialize (writer, this);
}
}
public static TreeNode LoadFromXml (string filePath)
{
XmlSerializer serializer = new XmlSerializer (typeof (TreeNode));
using (StreamReader reader = new StreamReader (filePath, System.Text.Encoding.UTF8))
{
TreeNode root = (TreeNode)serializer.Deserialize (reader);
SetParentRecursive (root, null);
return root;
}
}
private static void SetParentRecursive (TreeNode node, TreeNode parent)
{
node.Parent = parent;
foreach (TreeNode child in node.Children)
{
SetParentRecursive (child, node);
}
}
#endregion
#region IDisposable
public virtual void Dispose ()
{
foreach (TreeNode child in Children)
{
child.Dispose ();
}
Children.Clear ();
Parent = null;
Children = null;
}
#endregion
}
/// <summary>
/// 树根节点
/// </summary>
[Serializable]
public class TreeRoot: TreeNode
{
public TreeRoot ()
: base ("Root", "")
{
}
}
}
+8 -19
View File
@@ -10,8 +10,8 @@ namespace PriFileFormat
public HierarchicalSchemaVersionInfo Version { get; private set; } public HierarchicalSchemaVersionInfo Version { get; private set; }
public string UniqueName { get; private set; } public string UniqueName { get; private set; }
public string Name { get; private set; } public string Name { get; private set; }
public IReadOnlyList <ResourceMapScope> Scopes { get; private set; } public IReadOnlyList<ResourceMapScope> Scopes { get; private set; }
public IReadOnlyList <ResourceMapItem> Items { get; private set; } public IReadOnlyList<ResourceMapItem> Items { get; private set; }
bool extendedVersion; bool extendedVersion;
internal const string Identifier1 = "[mrm_hschema] \0"; internal const string Identifier1 = "[mrm_hschema] \0";
internal const string Identifier2 = "[mrm_hschemaex] "; internal const string Identifier2 = "[mrm_hschemaex] ";
@@ -64,7 +64,7 @@ namespace PriFileFormat
uint unicodeDataLength = binaryReader.ReadUInt32 (); uint unicodeDataLength = binaryReader.ReadUInt32 ();
binaryReader.ReadUInt32 (); // meaning unknown binaryReader.ReadUInt32 (); // meaning unknown
if (extendedHNames) binaryReader.ReadUInt32 (); // meaning unknown if (extendedHNames) binaryReader.ReadUInt32 (); // meaning unknown
List <ScopeAndItemInfo> scopeAndItemInfos = new List<ScopeAndItemInfo> ((int)(numScopes + numItems)); List<ScopeAndItemInfo> scopeAndItemInfos = new List<ScopeAndItemInfo> ((int)(numScopes + numItems));
for (int i = 0; i < numScopes + numItems; i++) for (int i = 0; i < numScopes + numItems; i++)
{ {
ushort parent = binaryReader.ReadUInt16 (); ushort parent = binaryReader.ReadUInt16 ();
@@ -78,7 +78,7 @@ namespace PriFileFormat
bool nameInAscii = (flags & 0x20) != 0; bool nameInAscii = (flags & 0x20) != 0;
scopeAndItemInfos.Add (new ScopeAndItemInfo (parent, fullPathLength, isScope, nameInAscii, nameOffset, index)); scopeAndItemInfos.Add (new ScopeAndItemInfo (parent, fullPathLength, isScope, nameInAscii, nameOffset, index));
} }
List <ScopeExInfo> scopeExInfos = new List <ScopeExInfo> ((int)numScopes); List<ScopeExInfo> scopeExInfos = new List<ScopeExInfo> ((int)numScopes);
for (int i = 0; i < numScopes; i++) for (int i = 0; i < numScopes; i++)
{ {
ushort scopeIndex = binaryReader.ReadUInt16 (); ushort scopeIndex = binaryReader.ReadUInt16 ();
@@ -127,7 +127,7 @@ namespace PriFileFormat
} }
for (int i = 0; i < numScopes; i++) for (int i = 0; i < numScopes; i++)
{ {
List <ResourceMapEntry> children = new List<ResourceMapEntry> (scopeExInfos [i].ChildCount); List<ResourceMapEntry> children = new List<ResourceMapEntry> (scopeExInfos [i].ChildCount);
for (int j = 0; j < scopeExInfos [i].ChildCount; j++) for (int j = 0; j < scopeExInfos [i].ChildCount; j++)
{ {
ScopeAndItemInfo saiInfo = scopeAndItemInfos [scopeExInfos [i].FirstChildIndex + j]; ScopeAndItemInfo saiInfo = scopeAndItemInfos [scopeExInfos [i].FirstChildIndex + j];
@@ -172,15 +172,6 @@ namespace PriFileFormat
FirstChildIndex = firstChildIndex; FirstChildIndex = firstChildIndex;
} }
} }
~HierarchicalSchemaSection ()
{
return;
Version = null;
foreach (var item in Items) { item.Parent = null; }
foreach (var scope in Scopes) { scope.Parent = null; }
Scopes = null;
Items = null;
}
// Checksum computation is buggy for some files // Checksum computation is buggy for some files
//private uint ComputeHierarchicalSchemaVersionInfoChecksum() //private uint ComputeHierarchicalSchemaVersionInfoChecksum()
@@ -267,21 +258,19 @@ namespace PriFileFormat
return fullName; return fullName;
} }
} }
~ResourceMapEntry () { Parent = null; }
} }
public class ResourceMapScope: ResourceMapEntry public class ResourceMapScope: ResourceMapEntry
{ {
internal ResourceMapScope (ushort index, ResourceMapScope parent, string name) : base (index, parent, name) {} internal ResourceMapScope (ushort index, ResourceMapScope parent, string name) : base (index, parent, name) { }
public IReadOnlyList <ResourceMapEntry> Children { get; internal set; } public IReadOnlyList<ResourceMapEntry> Children { get; internal set; }
public override string ToString () public override string ToString ()
{ {
return $"Scope {Index} {FullName} ({Children.Count} children)"; return $"Scope {Index} {FullName} ({Children.Count} children)";
} }
~ResourceMapScope () { Children = null; }
} }
public class ResourceMapItem: ResourceMapEntry public class ResourceMapItem: ResourceMapEntry
{ {
internal ResourceMapItem (ushort index, ResourceMapScope parent, string name) : base (index, parent, name) {} internal ResourceMapItem (ushort index, ResourceMapScope parent, string name) : base (index, parent, name) { }
public override string ToString () public override string ToString ()
{ {
return $"Item {Index} {FullName}"; return $"Item {Index} {FullName}";
-9
View File
@@ -46,15 +46,6 @@ namespace PriFileFormat
DataItemSections = dataItemSections; DataItemSections = dataItemSections;
return true; return true;
} }
~PriDescriptorSection ()
{
HierarchicalSchemaSections = null;
DecisionInfoSections = null;
ResourceMapSections = null;
ReferencedFileSections = null;
DataItemSections = null;
PrimaryResourceMapSection = null;
}
} }
[Flags] [Flags]
public enum PriDescriptorFlags: ushort public enum PriDescriptorFlags: ushort
+1 -46
View File
@@ -6,14 +6,12 @@ using System;
namespace PriFileFormat namespace PriFileFormat
{ {
public class PriFile: IDisposable public class PriFile
{ {
public string Version { get; private set; } public string Version { get; private set; }
public uint TotalFileSize { get; private set; } public uint TotalFileSize { get; private set; }
public IReadOnlyList <TocEntry> TableOfContents { get; private set; } public IReadOnlyList <TocEntry> TableOfContents { get; private set; }
public IReadOnlyList <Section> Sections { get; private set; } public IReadOnlyList <Section> Sections { get; private set; }
private bool _disposed = false;
private Stream _internalStream; // 跟踪内部流
private PriFile () private PriFile ()
{ {
} }
@@ -37,7 +35,6 @@ namespace PriFileFormat
private void ParseInternal (Stream stream, bool ownStream) private void ParseInternal (Stream stream, bool ownStream)
{ {
if (ownStream) { _internalStream = stream; }
using (BinaryReader binaryReader = new BinaryReader (stream, Encoding.ASCII, true)) using (BinaryReader binaryReader = new BinaryReader (stream, Encoding.ASCII, true))
{ {
long fileStartOffset = binaryReader.BaseStream.Position; long fileStartOffset = binaryReader.BaseStream.Position;
@@ -112,48 +109,6 @@ namespace PriFileFormat
} }
} }
public void Dispose ()
{
Dispose (true);
GC.SuppressFinalize (this);
}
protected virtual void Dispose (bool disposing)
{
if (_disposed) return;
if (disposing)
{
// 释放托管资源
if (_internalStream != null)
{
_internalStream.Dispose ();
_internalStream = null;
}
// 释放 section 内容
if (Sections != null)
{
foreach (var section in Sections)
{
var unknown = section as UnknownSection;
if (unknown != null)
unknown.ClearContent ();
var dataSection = section as DataItemSection;
if (dataSection != null)
dataSection.ClearData ();
}
Sections = null;
}
}
_disposed = true;
}
~PriFile ()
{
Dispose (false);
}
PriDescriptorSection priDescriptorSection; PriDescriptorSection priDescriptorSection;
public PriDescriptorSection PriDescriptorSection public PriDescriptorSection PriDescriptorSection
-1
View File
@@ -48,7 +48,6 @@
<Compile Include="ByteSpan.cs" /> <Compile Include="ByteSpan.cs" />
<Compile Include="ComStreamWrapper.cs" /> <Compile Include="ComStreamWrapper.cs" />
<Compile Include="DataItemSection.cs" /> <Compile Include="DataItemSection.cs" />
<Compile Include="DataTree.cs" />
<Compile Include="DecisionInfoSection.cs" /> <Compile Include="DecisionInfoSection.cs" />
<Compile Include="HierarchicalSchemaSection.cs" /> <Compile Include="HierarchicalSchemaSection.cs" />
<Compile Include="PriDescriptorSection.cs" /> <Compile Include="PriDescriptorSection.cs" />
-7
View File
@@ -121,11 +121,6 @@ namespace PriFileFormat
FileNameOffset = fileNameOffset; FileNameOffset = fileNameOffset;
} }
} }
~ReferencedFileSection ()
{
foreach (var file in ReferencedFiles) { file.Parent = null; }
ReferencedFiles = null;
}
} }
public class ReferencedEntry public class ReferencedEntry
{ {
@@ -150,13 +145,11 @@ namespace PriFileFormat
return fullName; return fullName;
} }
} }
~ReferencedEntry () { Parent = null; }
} }
public class ReferencedFolder: ReferencedEntry public class ReferencedFolder: ReferencedEntry
{ {
internal ReferencedFolder (ReferencedFolder parent, string name) : base (parent, name) {} internal ReferencedFolder (ReferencedFolder parent, string name) : base (parent, name) {}
public IReadOnlyList<ReferencedEntry> Children { get; internal set; } public IReadOnlyList<ReferencedEntry> Children { get; internal set; }
~ReferencedFolder () { Children = null; }
} }
public class ReferencedFile: ReferencedEntry public class ReferencedFile: ReferencedEntry
{ {
-19
View File
@@ -296,11 +296,6 @@ namespace PriFileFormat
DataOffset = dataOffset; DataOffset = dataOffset;
} }
} }
~ResourceMapSection ()
{
HierarchicalSchemaReference = null;
CandidateSets = null;
}
} }
public enum ResourceValueType public enum ResourceValueType
{ {
@@ -323,10 +318,6 @@ namespace PriFileFormat
DecisionIndex = decisionIndex; DecisionIndex = decisionIndex;
Candidates = candidates; Candidates = candidates;
} }
~CandidateSet ()
{
Candidates = null;
}
} }
public class Candidate public class Candidate
@@ -352,12 +343,6 @@ namespace PriFileFormat
DataItem = null; DataItem = null;
Data = data; Data = data;
} }
~Candidate ()
{
SourceFile = null;
DataItem = null;
Data = null;
}
} }
public class HierarchicalSchemaReference public class HierarchicalSchemaReference
{ {
@@ -372,10 +357,6 @@ namespace PriFileFormat
Unknown2 = unknown2; Unknown2 = unknown2;
UniqueName = uniqueName; UniqueName = uniqueName;
} }
~HierarchicalSchemaReference ()
{
VersionInfo = null;
}
} }
public struct ResourceMapItemRef public struct ResourceMapItemRef
{ {
-6
View File
@@ -148,12 +148,6 @@ namespace PriFileFormat
return true; return true;
} }
~ReverseMapSection ()
{
Mapping = null;
Scopes = null;
Items = null;
}
} }
} }
-4
View File
@@ -81,9 +81,5 @@ namespace PriFileFormat
} }
} }
~Section ()
{
PriFile = null;
}
} }
} }
+5 -1
View File
@@ -71,6 +71,10 @@ namespace PriFileFormat
throw new NotSupportedException (); throw new NotSupportedException ();
} }
~SubStream () { baseStream = null; } public override void Close ()
{
base.Close ();
baseStream = null;
}
} }
} }
-1
View File
@@ -18,6 +18,5 @@ namespace PriFileFormat
{ {
SectionContent = null; SectionContent = null;
} }
~UnknownSection () { ClearContent (); }
} }
} }
+4 -1
View File
@@ -1,3 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/></startup></configuration> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
</startup>
</configuration>
Binary file not shown.
+205
View File
@@ -0,0 +1,205 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{33D91B58-1981-4A3C-B4D1-86EE406CDE12}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>priformatcli</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<CLRSupport>true</CLRSupport>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PRIFORMATCLI_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PRIFORMATCLI_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PRIFORMATCLI_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PRIFORMATCLI_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<AdditionalDependencies>shlwapi.lib;version.lib;dwmapi.lib;winhttp.lib;Psapi.lib;advapi32.lib;gdi32.lib;comdlg32.lib;shell32.lib;ole32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="localeex.h" />
<ClInclude Include="mpstr.h" />
<ClInclude Include="nstring.h" />
<ClInclude Include="prifile.h" />
<ClInclude Include="priformatcli.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="strcmp.h" />
<ClInclude Include="syncutil.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="themeinfo.h" />
<ClInclude Include="typestrans.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
</PrecompiledHeader>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
<CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">false</CompileAsManaged>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="priformatcli.cpp" />
<ClCompile Include="stdafx.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="priformatcli.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PriFileFormat\PriFile.csproj">
<Project>{ef4012d4-ef08-499c-b803-177739350b2d}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>