国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

在C#中動(dòng)態(tài)調(diào)用native dll的導(dǎo)出函數(shù)

2024-07-21 02:28:48
字體:
供稿:網(wǎng)友

在 c++ 中我們能夠通過 loadlibrary,  getprocaddress 來動(dòng)態(tài)調(diào)用 dll 的導(dǎo)出函數(shù).
在 c# 中也能夠用這樣的方式嗎?
在 dotnet 2.0 里面這樣是可以的, 這完全得益于 2.0新增的一個(gè)函數(shù)
marshal.getdelegateforfunctionpointer 方法
此方法在 .net framework 2.0 版中是新增的。

將非托管函數(shù)指針轉(zhuǎn)換為委托。
實(shí)例代碼如下:


public delegate int msgbox(int hwnd,string msg,string cpp,int ok);

        [dllimport("kernel32")]
        public static extern int getprocaddress(int handle, string funcname);
        [dllimport("kernel32")]
        public static extern int loadlibrary(string funcname);
        [dllimport("kernel32")]
        public static extern int freelibrary(int handle);

        private static delegate getaddress(int dllmodule, string functionname, type t)
        {
            int addr = getprocaddress(dllmodule, functionname);
            if (addr == 0)
                return null;
            else
                return marshal.getdelegateforfunctionpointer(new intptr(addr), t);
        }

        private void button1_click(object sender, eventargs e)
        {
            int huser32 = 0;
            huser32 = loadlibrary("user32.dll");        
            msgbox mymsg = (msgbox)getaddress(huser32, "messageboxa", typeof(msgbox));
            mymsg(this.handle.toint32(), txtmsg.text, txttitle.text , 64);
            freelibrary(huser32);
        }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 玛纳斯县| 论坛| 沂南县| 临漳县| 贵港市| 特克斯县| 平乡县| 平武县| 界首市| 泽普县| 石首市| 临潭县| 永福县| 云林县| 宁德市| 资源县| 正蓝旗| 彭泽县| 密山市| 龙山县| 吉林省| 晋宁县| 惠安县| 都昌县| 稻城县| 新民市| 宝鸡市| 新营市| 西宁市| 米脂县| 海城市| 北京市| 永靖县| 独山县| 沙坪坝区| 六枝特区| 津市市| 尖扎县| 日土县| 洞头县| 玉树县|