不能定义声明dllimport_C#:多个声明的一个属性(DLLImport)
我正在使用[DLLImport]属性来访问我的.NET代码中的一堆C函数.
现在,我通过以下方式拥有所有功能:
const string DLL_Path = "path\\to\\my\\dll.dll";
[DllImport(DLL_Path,
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public static extern int MyFunction1();
[DllImport(DLL_Path,
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction2(int id);
[DllImport(DLL_Path,
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction3(string server, byte timeout,
ref int connection_id, ref DeviceInfo pInfos);
[DllImport(DLL_Path,
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction4([MarshalAs(UnmanagedType.LPArray)] byte[] pVersion,
ref int psize);
[DllImport(DLL_Path,
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public static extern ErrorCode MyFunction5(int errorcode,
[MarshalAs(UnmanagedType.LPTStr)] string pmsg, ref int psize);
这并不令人满意:重复属性似乎效率低下并破坏了函数原型的可读性.特别是因为我有20或30个函数要导入.
我想知道我是否可以在某个地方使用[DllImport(DLL_Path,CallingConvention = CallingConvention.StdCall,CharSet = CharSet.Ansi)]部分并更清楚地识别函数定义,就像这个伪代码:
const string DLL_Path = "path\\to\\my\\dll.dll";
// some code defining a section which tells that the next functions are DLLImport
[DllImport(DLL_Path, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
{
public static extern int MyFunction1();
public static extern ErrorCode MyFunction2(int id);
public static extern ErrorCode MyFunction3(string server, byte timeout, ref int connection_id, ref DeviceInfo pInfos);
public static extern ErrorCode MyFunction4([MarshalAs(UnmanagedType.LPArray)] byte[] pVersion, ref int psize);
public static extern ErrorCode MyFunction5(int errorcode, [MarshalAs(UnmanagedType.LPTStr)] string pmsg, ref int psize);
}
这可能吗?
我在SO:Shorten amount of DllImport in C#?中发现了这个问题,但它建议通过LoadLibrary和GetProcAddress动态加载函数,我发现它们的可读性较差.
解决方法:
不,没有办法将属性简化为单个声明.您需要将属性应用于所有方法.
但您至少可以将属性声明缩短为[DllImport(DLL_Path)],因为您为CallingConvention和CharSet指定的值与默认值相同.
标签:c,attributes,dllimport
来源: https://codeday.me/bug/20190629/1328035.html
不能定义声明dllimport_C#:多个声明的一个属性(DLLImport)相关推荐
- JS基础篇--函数声明与定义,作用域,函数声明与表达式的区别
Scoping & Hoisting 例: var a = 1;function foo() {if (!a) {var a = 2;}alert(a); };foo(); 上面这段代码在运行 ...
- python定义字符串数组_python数组声明
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如何在python? 我无法在文档中找到对数组的任何引用... 我正在制作一个小 ...
- 将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积。
将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积. 编写Shirt类继承Frock类,实现 calcArea方法,用来计算衬衣所需的 ...
- java 声明静态类_java静态类声明--java类可以声明为static吗
为了理解static关键字在类声明中的使用,首先我们需要了解类声明.有两种类,一种是top-level class:一种是inner class. Top-level classes top-leve ...
- Js 变量声明提升和函数声明提升
Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...
- Linux 命令之 typeset -- 声明 shell 变量,设置变量的属性
文章目录 一.命令介绍 二.常用选项 三.命令示例 (1)定义关联数组并访问 一.命令介绍 typeset 命令是 bash 的内建命令,是命令 declare 的别名,两者是完全一样的,用来声明 s ...
- var和function谁先优先执行_变量var声明和函数function声明优先级
变量声明优先级 使用var关键字和function关键字声明的变量,会被JS的解释器优先解析执行,具有优先级 使用var关键字声明变量 1. 看代码说话 // 在script中直接打印输出变量a co ...
- ts自动编译声明文件_TS 的声明文件
打算为你的团队写一个封装好的工具?TS的声明文件是必不可少的,它不仅仅让你的工具支持TS,更是负责充当一个说明书的作用,让人对其的使用一目了然. 什么是声明语句?什么时候需要他? 假如我们想使用第三方 ...
- 1.19.5.3.时态表、关联一张版本表、关联一张普通表、时态表、声明版本表、声明版本视图、声明普通表、时态表函数等
1.19.5.3.时态表(Temporal Tables) 1.19.5.3.1.设计初衷 1.19.5.3.1.1.关联一张版本表 1.19.5.3.1.2.关联一张普通表 1.19.5.3.2.时 ...
最新文章
- win10 安装字体且不占用系统盘资源
- 记录几个vim的命令
- tp剩余未验证内容-7
- 【LeetCode】50. Pow(x, n) (3 solutions)
- Luogu 4284 [SHOI2014]概率充电器
- socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析
- 几种机器学习平台的对比和选择
- 允许外部客户使用ISA防火墙的Web代理服务2
- 为你的简书和 GitHub 设定个性域名
- mysql服务器磁盘空间耗尽_一次服务器磁盘空间不足导致的一系列问题
- 无码间干扰,升余弦滤波器,非线性失真
- ubuntu安装cuda驱动
- php 判断是否是日文,php正则判断中文韩文的编码的例子
- matlab软件moran值,MATLAB 的moran,LM值
- Java8新特性之日期和时间
- 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
- Windows 10正式版官方原版ISO镜像下载
- 继《微博尾》之《玩转尾巴》好玩尾巴积分版
- 计算机一接上网线重新启动,一插上网线电脑会自动重启解决方法
- matlab编写拉格朗日插值代码函数
热门文章
- Momenta获C轮5亿美元融资,上汽、丰田、博世等领投 | 九合系融资新闻
- 月薪25-80K丨一汽(南京)招聘雷达感知开发工程师、主管、主任、高级主任
- mysql大表迁移_MySQL 大表迁移
- RDKit | PD/PD-L1抑制活性 化合物指标分析
- Android 中几个常用的分析工具的下载地址
- 灯泡亮度控制单片机_南航电赛-灯光控制系统
- NBT:主流高通量测序仪在人/细菌/宏基因组测序评测结果发布,华大智造表现优异...
- NC:中国药科郝海平和郑啸发现饮食-微生物互作缓解肠损伤
- 中国大陆SCIE收录期刊分析:多少本刊?发文多少?解决了多大内卷?
- MPB:中科院城环所苏建强、朱永官等-功能基因高通量定量方法