2015-04-23 61 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! –