news 2026/7/5 18:37:01

将《C# 调用非托管程序》一文中最后一种方法修改如下(篇幅原因简化了注释):

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
将《C# 调用非托管程序》一文中最后一种方法修改如下(篇幅原因简化了注释):

/*修改记录
2008-5-11 8:07 曲滨
>> 基本实现预期功能
[!] 明天进行优化

2008-5-12 15:54 曲滨
[E] 优化完成
[N] 加入 NativeCodeHelper 类便于使用

2010-6-17 周振兴
修改兼容性,可在开启DEP及Vista/Win7中运行。
*/

namespace NShellNativeCode
{
using System;
using System.Runtime.InteropServices;

delegate int AddProc(int p1, int p2);
class Program
{
static void Main(string[] args)
{
byte[] codeBytes = {
0x8B, 0x44, 0x24, 0x08 // mov eax,[esp+08h]
, 0x8B, 0x4C, 0x24, 0x04 // mov ecx,[esp+04h]
, 0x03, 0xC1 // add eax,ecx
, 0xC3 // ret
};

/*
上面的字节数组,就是下面函数的本机代码;
int add(int x,int y) {
return x+y;
}

*/

IntPtr handle = IntPtr.Zero;
handle =VirtualAlloc(
IntPtr.Zero,
codeBytes.Length,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);

try
{

Marshal.Copy(codeBytes, 0, handle, codeBytes.Length);

AddProc add
= Marshal.GetDelegateForFunctionPointer(handle, typeof(AddProc)) as AddProc;

int r = add(1976, 1);

Console.WriteLine("本机代码返回:{0}", r);


}
finally
{
VirtualFree(handle, 0, MEM_RELEASE);
}

Console.ReadLine();
}

//Windows API
[DllImport("Kernel32.dll", EntryPoint = "VirtualAlloc")]
public static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect);

[DllImport("Kernel32.dll", EntryPoint = "VirtualFree")]
public static extern bool VirtualFree(IntPtr address, int size, uint freeType);

//flags
const uint MEM_COMMIT = 0x1000;
const uint MEM_RESERVE = 0x2000;

const uint PAGE_EXECUTE_READWRITE = 0x40;

const uint MEM_RELEASE = 0x8000;
}
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 18:36:03

CANN asc-devkit bfloat16转float函数

asc_bfloat162float 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://git…

作者头像 李华
网站建设 2026/7/5 18:35:33

Instatic边缘部署:Vercel Edge Functions配置指南

Instatic边缘部署:Vercel Edge Functions配置指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic是一款现代化的自托管可视化C…

作者头像 李华
网站建设 2026/7/5 18:34:59

Missionary vs RxJava vs Core.async:Clojure响应式编程框架对比分析

Missionary vs RxJava vs Core.async:Clojure响应式编程框架对比分析 【免费下载链接】missionary A functional effect and streaming system for Clojure/Script 项目地址: https://gitcode.com/gh_mirrors/mi/missionary Missionary 是一个为 Clojure/Scr…

作者头像 李华
网站建设 2026/7/5 18:34:50

CANN稀疏算子通用修改指南

通用修改要点 【免费下载链接】ops-sparse 本项目是CANN提供的高性能稀疏矩阵计算的算子库,专注于优化稀疏矩阵的计算效率。 项目地址: https://gitcode.com/cann/ops-sparse 本文件适用于所有文件类型的修改。每次修改完成后,必须逐项检查。 修改…

作者头像 李华