关于 C# dllimport

本文介绍了C#的DllImport功能,其用于调用C++编写的接口。使用时需注意两点:一是C#项目平台和DLL平台要匹配,如x86对应x86;二是声明接口时函数调用协议要匹配,若出现堆栈崩溃需调整调用约定,同时可指定EntryPoint来明确原始函数名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c#的dllimport 是为了调用C++编写的接口而提供的功能。

1. c#的项目平台和DLL的平台要匹配,比如x86 => x86, 而不能x64 => x86 或者 Any cpu => x86

2. 在声明接口的时候,要注意函数调用协议要匹配,

如果出先堆栈奔溃,则需要调整调用约定,比如:

[DllImport("somedll.dll", EntryPoint = "?TestFunc@JUOJYWER@Z", CallingConvention = CallingConvention.Cdecl)]

private extern static bool TestFunc();

这里指定了调用约定是Cdecl,和模块提供的接口的调用约定保持一致。

3. EntryPoint是为了指定接口的原始函数名,上面的TestFunc 的EntryPoint 为?TestFunc@JUOJYWER@Z,如果不指定的话,会出现找不到函数。可以使用IDA或者16进制编辑器找到真实的函数名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值