netcore调用c++的dll的两种方法

 

目录

1、托管库和非托管库介绍

2、非托管库

3、托管库


1、托管库和非托管库介绍

托管型代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。(C# )
非托管型代码对象有实际的内存地址,创建的对象必须自己来管理和释放。(C++)

2、非托管库

C++创建的非托管dll库,需要用静态方法调用;

非托管模式从功能上来说,只支持函数调用,直接调用C++类库中的公共方法,在被导出的函数前面一定要添加额extern “C来指明导出函数的时候使用C语言方式编译和链接的,这样保证函数定义的名字相同,否则如果默认按C++方式导出,那个函数名字就会变得乱七八糟,我们的程序就无法找到入口点了。"__declspec(dllexport)“意思是将后面修饰的内容定义为DLL中要导出的内容。

C++中定义如下:

extern "C"

{

extern __declspec(dllexport) void   mbm_test();

}
或者直接定义:extern "C" __declspec(dllexport) void mbm_test(){}


在C#中,调用如下:

[DllImport("mbmasterd.dll", EntryPoint = "mbm_test")]
static extern void mbm_test();
 

3、托管库

使用CLR生成的托管C++dll库

需要在C++项目里面设置,让动态库受到公共语言运行时的支持,然后c#工程添加dll的引用即可调用了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NetCore 是一个开源的跨平台开发框架,提供了动态注入 DLL 的功能。在 NetCore 中,可以使用依赖注入容器来实现动态注入 DLL。 首先,我们需要在项目中添加所需的 DLL 文件。在项目的依赖项中,通过 NuGet 包管理器安装相关的依赖项,并将 DLL 文件复制到项目的适当路径下。 接下来,我们需要在项目的 Startup.cs 文件中配置依赖注入容器。首先,我们需要在 ConfigureServices 方法中添加相关的服务配置代码,例如: ```csharp public void ConfigureServices(IServiceCollection services) { // 添加所需的服务配置 services.AddSomeService(); // 添加某个服务 services.AddScoped<ISomeInterface, SomeImplementation>(); // 注册接口和实现的对应关系 // ... } ``` 在这里,可以根据项目的需求添加所需的服务配置,包括各种接口和实现的对应关系等。 然后,在项目的 Controller 或其他需要注入 DLL 的类中,我们可以通过构造函数或属性注入的方式来获取所需的服务,例如: ```csharp public class HomeController : Controller { private readonly ISomeInterface _someService; public HomeController(ISomeInterface someService) { _someService = someService; } // ... } ``` 通过以上方式,我们就可以在需要的地方动态注入 DLL,并使用相应的服务。当程序运行时,依赖注入容器会自动解析依赖关系,将实现注入到所需的位置。 总的来说,NetCore 提供了依赖注入的特性,通过配置依赖注入容器,可以方便地实现动态注入 DLL,并在项目中使用相应的服务。这样可以提高代码的可维护性和可测试性,使程序更加灵活和可扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值