2015-04-23 43 views
0

我发现这个代码从Youtube,它展示了如何提取嵌入式资源,与我的修改,将从另一个应用程序中提取。德尔福等效代码的C#提取嵌入式资源

private static void Extract(string FileName, string nameSpace, string outDirectory, string internalFilePath, string resourceName) 
    { 
     Assembly assembly = Assembly.LoadFile(FileName); 
     string ManifestString = nameSpace + '.' + (internalFilePath == "" ? "" : internalFilePath + ".") + resourceName; 
     using (Stream s = assembly.GetManifestResourceStream(ManifestString)) 
      using (BinaryReader r = new BinaryReader(s)) 
       using (FileStream fs = new FileStream(outDirectory + "\\" + resourceName, FileMode.OpenOrCreate)) 
        using (BinaryWriter w = new BinaryWriter(fs)) 
         w.Write(r.ReadBytes((int)s.Length)); 
    } 

我们有这个Delphi的等效代码吗?

+1

通常你会使用'TResourceStream'。但资源机制不同。所以它可能取决于你的资源是什么以及你如何链接它。 –

+0

@DavidHeffernan,是的,我已经尝试过'TResourceStream',但我发现很难提取.net应用程序中的资源。因为我已经读过.net使用'.net-assembly' ... –

+0

我不明白。您正试图使用​​Delphi代码从.net程序集中提取资源? –

回答

2

我想说你有两个选择。

  1. 托管CLR,并使用CLR API调用它。
  2. 创建一个.net类库并让它为您完成工作。使用Delphi代码中的.net类库。

第一个选项真的没有乐趣。 CLR API功能非常强大,但也具有陡峭的学习曲线。

第二个选项非常简单。通过COM使用C#和导出功能,或者使用UnmanagedExports。这将允许您使用问题中的代码。或者使用混合模型C++/CLI类库,并公开经典的非托管DLL导出功能。这将需要您将问题的代码转换为C++。

+0

感谢大卫,我会尝试选项#2! –