将C#中编译好的DLL文件转换为16进制字符串,然后反射调用

将C#中编译好的DLL文件转换为16进制字符串,然后反射调用

编码文章call10242025-05-03 12:33:241A+A-

将C#中编译好的DLL文件转换为16进制字符串,然后在程序中采用反射调用该16进制字符串的方法。使用场景可以在本地程序调用远程服务端生成的16进制DLL字符串,这样本地不会产生文件。

using System;

using System.IO;

using System.Reflection;

using System.Text;

class Program

{

static void Main()

{

// 将C#编译好的DLL文件内容转换为16进制字符串,并在C#中反射调用这个DLL16进制字符串里的方法

string dllPath = "YourLibrary.dll"; // 请替换成实际的DLL路径

string hexString = ConvertDllToHexString(dllPath);

// 反射调用DLL中的方法

InvokeMethodFromHex(hexString, "YourNamespace.YourClass", "YourMethod");

}

static string ConvertDllToHexString(string dllPath)

{

try

{

// 读取DLL文件内容

byte[] dllBytes = File.ReadAllBytes(dllPath);

// 将DLL字节数组转换成16进制字符串

string hexString = BitConverter.ToString(dllBytes).Replace("-", "");

return hexString;

}

catch (Exception ex)

{

// 异常处理

Console.WriteLine("Error converting DLL to hex string: " + ex.Message);

return string.Empty;

}

}

static void InvokeMethodFromHex(string hexString, string typeName, string methodName)

{

try

{

// 将16进制字符串转换成字节数组

byte[] dllBytes = HexStringToByteArray(hexString);

// 加载DLL字节数组

Assembly assembly = Assembly.Load(dllBytes);

// 获取类型和方法信息

Type type = assembly.GetType(typeName);

MethodInfo methodInfo = type.GetMethod(methodName);

// 创建对象并调用方法

object instance = Activator.CreateInstance(type);

methodInfo.Invoke(instance, null);

}

catch (Exception ex)

{

// 异常处理

Console.WriteLine("Error invoking method from hex: " + ex.Message);

}

}

static byte[] HexStringToByteArray(string hex)

{

// 将16进制字符串转换成字节数组

int numberChars = hex.Length;

byte[] bytes = new byte[numberChars / 2];

for (int i = 0; i < numberChars; i += 2)

{

bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);

}

return bytes;

}

}

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4