C++ dll 注入 C# 代码示例
时间: 2024-10-04 22:04:39 浏览: 69
C++ DLL注入到C#通常涉及将C++库动态链接到.NET应用程序。以下是一个简单的C++ DLL(MyDll.dll)创建示例,然后演示如何在C#中加载并使用它:
**C++ DLL (MyDll.cpp) 示例:**
```cpp
// MyDll.h
#pragma once
extern "C" __declspec(dllexport) void SayHello(const char* name);
```
```cpp
// MyDll.cpp
#include "MyDll.h"
#include <iostream>
void SayHello(const char* name) {
std::cout << "Hello, " << name << "!" << std::endl;
}
```
**C# 中的DLL注入和调用示例:**
```csharp
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("MyDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SayHello(string name);
static void Main(string[] args)
{
// 加载DLL
LoadLibrary("MyDll.dll");
// 调用DLL函数
SayHello("World"); // 这会打印 "Hello, World!"
// 清理资源
FreeLibrary(handle); // handle是LoadLibrary返回的HMODULE类型的值
}
// Windows API函数
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32.dll")]
private static extern bool FreeLibrary(IntPtr hModule);
}
```
在这个例子中,C#通过`DllImport`属性告诉编译器需要从指定的DLL导入函数,并指定了正确的调用约定(`CallingConvention.Cdecl`)。`FreeLibrary`用于释放由`LoadLibrary`加载的DLL。
阅读全文