读取嵌入到 Dll 文件中的资源文件

private static Hashtable _asmfiles;

public static byte[] LoadAssemblyFiles(string filename)
  {
   if (filename == null)
   {
    throw new ArgumentNullException("filename");
   }
   if (!filename.StartsWith("/"))
   {
    throw new ArgumentException("must starts with '/'", "filename");
   }
   filename = "/" + filename.Remove(0, 1).Replace('/', '.');
   if (Resx._asmfiles == null)
   {
    Hashtable afs = new Hashtable();
    foreach (string resname in typeof(Resx).Assembly.GetManifestResourceNames())
    {
     if (resname.StartsWith("UploadFileHelper.Uploader.File."))
     {
      byte[] buf;
      string fn = "/" + resname.Remove(0, "UploadFileHelper.Uploader.File.".Length);
      fn = fn.ToLower();
      using (Stream s = typeof(Resx).Assembly.GetManifestResourceStream(resname))
      {
       buf = new byte[s.Length];
       s.Read(buf, 0, buf.Length);
      }
      afs.Add(fn, buf);
     }
    }
    Resx._asmfiles = afs;
   }
   return (byte[]) Resx._asmfiles[filename.ToLower()];
  } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Linux 下使用 Intel 编译器编译 Fortran 代码,调用 C++ 接口读取嵌入源文件里面的文件,可以按照以下的步骤进行: 1. 编写 C++ 接口函数,用于读取嵌入源文件里的文件。这个函数可以使用标准的 C++ 文件读写 API,也可以使用操作系统提供的 API,例如 Linux 下的 `fread()` 和 `fseek()` 等函数。 2. 编译 C++ 接口函数成动态链接库(DLL)。可以使用 Intel 编译器编译 C++ 代码,并将其编译成动态链接库。例如: ``` icpc -shared -fPIC -o libreadfile.so readfile.cpp ``` 这个命令将 C++ 代码 `readfile.cpp` 编译成动态链接库 `libreadfile.so`,其 `-shared` 选项表示编译成共享库,`-fPIC` 选项表示生成位置无关代码。 3. 将要嵌入文件转换成 C 数组,并在 Fortran 代码声明。可以使用 `xxd` 工具将文件转换成 C 数组,例如: ``` xxd -i test.dat > test_dat.h ``` 这个命令将二进制文件 `test.dat` 转换成 C 数组,并存储到头文件 `test_dat.h` 。 在 Fortran 代码,可以使用 `external` 关键字声明这个 C 数组,例如: ```fortran program main use iso_c_binding implicit none interface subroutine read_file(cfilename, data, size) bind(C) import :: C_CHAR, C_INT, C_PTR character(kind=C_CHAR), dimension(*), intent(in) :: cfilename type(C_PTR), intent(out) :: data integer(kind=C_INT), intent(out) :: size end subroutine read_file end interface character(len=100) :: filename = "test.dat" integer(kind=c_int) :: size type(c_ptr) :: data external read_file ! 调用 C++ 接口函数,读取嵌入文件 call read_file(c_char_array(filename), data, size) ! 将 C 数组转换成 Fortran 数组 real, dimension(size) :: file_data call c_f_pointer(data, file_data) ! 处理文件数据 ... end program main ``` 这个 Fortran 代码声明了一个名为 `read_file` 的 C++ 接口函数,并在程序调用它。`read_file` 函数接受一个字符串参数 `cfilename`,表示要读取文件名,以及两个输出参数 `data` 和 `size`,分别表示文件的数据和大小。在程序,使用 `external` 关键字将 `read_file` 函数声明为外部函数,并使用 `call` 语句调用它。最后,将 `data` 转换成 Fortran 数组,并进行处理。 4. 在链接器链接 C++ 接口函数和 Fortran 代码。可以使用下面的命令将 Fortran 代码和 C++ 接口函数链接成可执行文件: ``` ifort -o myprog main.f90 -L. -lreadfile ``` 这个命令将 Fortran 代码 `main.f90` 和动态链接库 `libreadfile.so` 链接成可执行文件 `myprog`,其 `-L.` 选项表示链接器要在当前目录查找动态链接库,`-lreadfile` 选项表示链接器要链接动态链接库 `libreadfile.so`。 这样,就可以在 Fortran 代码调用 C++ 接口函数,读取嵌入源文件里面的文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值