日期:2014-05-17  浏览次数:21137 次

***************** 百度无答案! C# 能否动态加载嵌入资源的非托管DLL? ************
本帖最后由 liucqa 于 2014-01-21 15:34:48 编辑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace HardwareSignature
{
    public class DllInvoke
    {
        [DllImport("kernel32.dll")]
        private extern static IntPtr LoadLibrary(String path);
        [DllImport("kernel32.dll")]
        private extern static IntPtr GetProcAddress(IntPtr lib, String funcName);
        [DllImport("kernel32.dll")]
        private extern static bool FreeLibrary(IntPtr lib);
        private IntPtr hLib;


        public DllInvoke(String DLLPath)
        {
            hLib = LoadLibrary(DLLPath);
        }
        ~DllInvoke()
        {
            FreeLibrary(hLib);
        }
        //将要执行的函数转换为委托
        public Delegate Invoke(String APIName, Type t)
        {
            IntPtr api = GetProcAddress(hLib, APIName);
            return (Delegate)Marshal.GetDelegateForFunctionPointer(api, t);
        }
    }
}


加载文件中的非托管DLL,用上面的类就行

那么,加载嵌入资源中的非托管DLL,应该怎么做呢?

GetManifestResourceStream可以得到文件数组,然后呢?不要写成文件的



------解决方案--------------------
不要写成文件的,那就是没门了。还是换个方式吧。
------解决方案--------------------
引用:
为啥微软不提供一个读取数组的LoadLibrary呢?



估计会有一些问题吧,呵呵,建议你写成文件吧