我正在使用[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)相关推荐

  1. JS基础篇--函数声明与定义,作用域,函数声明与表达式的区别

    Scoping & Hoisting 例: var a = 1;function foo() {if (!a) {var a = 2;}alert(a); };foo(); 上面这段代码在运行 ...

  2. python定义字符串数组_python数组声明

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如何在python? 我无法在文档中找到对数组的任何引用... 我正在制作一个小 ...

  3. 将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积。

    将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积. 编写Shirt类继承Frock类,实现 calcArea方法,用来计算衬衣所需的 ...

  4. java 声明静态类_java静态类声明--java类可以声明为static吗

    为了理解static关键字在类声明中的使用,首先我们需要了解类声明.有两种类,一种是top-level class:一种是inner class. Top-level classes top-leve ...

  5. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  6. Linux 命令之 typeset -- 声明 shell 变量,设置变量的属性

    文章目录 一.命令介绍 二.常用选项 三.命令示例 (1)定义关联数组并访问 一.命令介绍 typeset 命令是 bash 的内建命令,是命令 declare 的别名,两者是完全一样的,用来声明 s ...

  7. var和function谁先优先执行_变量var声明和函数function声明优先级

    变量声明优先级 使用var关键字和function关键字声明的变量,会被JS的解释器优先解析执行,具有优先级 使用var关键字声明变量 1. 看代码说话 // 在script中直接打印输出变量a co ...

  8. ts自动编译声明文件_TS 的声明文件

    打算为你的团队写一个封装好的工具?TS的声明文件是必不可少的,它不仅仅让你的工具支持TS,更是负责充当一个说明书的作用,让人对其的使用一目了然. 什么是声明语句?什么时候需要他? 假如我们想使用第三方 ...

  9. 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.时 ...

最新文章

  1. win10 安装字体且不占用系统盘资源
  2. 记录几个vim的命令
  3. tp剩余未验证内容-7
  4. 【LeetCode】50. Pow(x, n) (3 solutions)
  5. Luogu 4284 [SHOI2014]概率充电器
  6. socket timeout是什么引起的_MySQL C API 参数 MYSQL_OPT_READ_TIMEOUT 的一些行为分析
  7. 几种机器学习平台的对比和选择
  8. 允许外部客户使用ISA防火墙的Web代理服务2
  9. 为你的简书和 GitHub 设定个性域名
  10. mysql服务器磁盘空间耗尽_一次服务器磁盘空间不足导致的一系列问题
  11. 无码间干扰,升余弦滤波器,非线性失真
  12. ubuntu安装cuda驱动
  13. php 判断是否是日文,php正则判断中文韩文的编码的例子
  14. matlab软件moran值,MATLAB 的moran,LM值
  15. Java8新特性之日期和时间
  16. 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
  17. Windows 10正式版官方原版ISO镜像下载
  18. 继《微博尾》之《玩转尾巴》好玩尾巴积分版
  19. 计算机一接上网线重新启动,一插上网线电脑会自动重启解决方法
  20. matlab编写拉格朗日插值代码函数

热门文章

  1. Momenta获C轮5亿美元融资,上汽、丰田、博世等领投 | 九合系融资新闻
  2. 月薪25-80K丨一汽(南京)招聘雷达感知开发工程师、主管、主任、高级主任
  3. mysql大表迁移_MySQL 大表迁移
  4. RDKit | PD/PD-L1抑制活性 化合物指标分析
  5. Android 中几个常用的分析工具的下载地址
  6. 灯泡亮度控制单片机_南航电赛-灯光控制系统
  7. NBT:主流高通量测序仪在人/细菌/宏基因组测序评测结果发布,华大智造表现优异...
  8. NC:中国药科郝海平和郑啸发现饮食-微生物互作缓解肠损伤
  9. 中国大陆SCIE收录期刊分析:多少本刊?发文多少?解决了多大内卷?
  10. MPB:中科院城环所苏建强、朱永官等-功能基因高通量定量方法