2014-06-06 15 views
0

我们想列出C#中的非托管资源库(DLL)的内容(键/值对)。
(请注意,资源DLL是不是 .NET程序集/ DLL)使用C#列出存储在非托管资源库DLL中的消息ID和名称

按规定in MSDN资源库的定义。

mc -s EventLogMsgs.mc 
rc EventLogMsgs.rc 
link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res 

样本EventLogMsgs.mc可能是:

; // - Event categories - 
; // Categories must be numbered consecutively starting at 1. 
; // ******************************************************** 

MessageId=0x1 
Severity=Success 
SymbolicName=INSTALL_CATEGORY 
Language=English 
Installation 
. 

MessageId=0x2 
Severity=Success 
SymbolicName=QUERY_CATEGORY 
Language=English 
Database Query 
. 

... 

如果该资源库DLL是一个.NET程序集DLL,上市资源将使用这些方针的东西来完成:

string strResourceDLLPath = "c:\\temp\\EventLogMsgs.DLL"; 

Assembly resAssembly = Assembly.LoadFrom(strResourceDLLPath); 
ResourceManager resMgr = new ResourceManager("ResourcesLib.Messages", resAssembly); 
ResourceSet resSet = resMgr.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture, true, true); 

foreach (DictionaryEntry r in resSet) 
    Console.WriteLine("Key={0} Value={1}", r.Key.ToString(), r.Value.ToString()); 

谢谢!

+0

'ResourceManager'用于管理资源。 –

+0

同意,ResourceManager不能用于此目的。代码片段仅仅是我们试图为非托管资源实现的一个演示。 – alexg

+2

我认为你必须使用win32 api。 –

回答

0

post包含一个win32 API解决方案,用于列出仅资源DLL中的消息详细信息。

为了能够在C#中执行相同的操作,必须使用P/Invoke。

相关问题