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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-18 17:06:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在 C++ 中我們能夠通過(guò) LoadLibrary,  GetPRocAddress 來(lái)動(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);
        }

鏈接地址: http://rick.VEVb.com/archive/2006/07/13/apicall.html


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜宾县| 泊头市| 普兰县| 阿克陶县| 偏关县| 滨海县| 乳源| 西乌珠穆沁旗| 柘荣县| 平利县| 德化县| 佛山市| 金平| 鸡东县| 寿光市| 沾益县| 越西县| 廉江市| 建瓯市| 太原市| 尼木县| 确山县| 邮箱| 高青县| 墨竹工卡县| 丹凤县| 高清| 三门县| 凤凰县| 小金县| 深水埗区| 乌兰察布市| 汤阴县| 沅陵县| 宁远县| 六安市| 集安市| 思南县| 屏南县| 广平县| 湖口县|