平台调用#define指令[关闭]

Posted

技术标签:

【中文标题】平台调用#define指令[关闭]【英文标题】:Platform invoke #define directive [closed] 【发布时间】:2016-01-16 11:31:27 【问题描述】:

我正在尝试了解平台调用。所以,我理解了很多概念,但是如何在 c# 中调用 #define 指令。

例子:

在 C++ 方面我有这个:

#define dont_care_how_you_invoke_me (ptr)   

我试过了:

[DllImport("mydll.dll")]
static extern void dont_care_how_you_invoke_me(IntPtr ptr);

这不起作用。我在谷歌上搜索了一段时间,找不到任何东西,所以我什至不确定这是否可能。

提前致谢

【问题讨论】:

因为 c# 没有你不能的预处理器。 为什么要“调用”预处理器宏?这些东西在编译期间被扩展,因此甚至不存在于生成的可执行文件中,就像内联函数一样,除了它们缺乏类型安全和其他一些东西。两者都不能从 C# 调用,因为它们并不是真正的函数,它们只是插入到函数调用所在位置的一堆指令。只需使用常规函数。 【参考方案1】:

C# 中的 PInvoke 导入方法对应于 DLL 中的实际 导出 函数,而不是函数的 C/C++ 语法表示(这就是在处理 C++ 中的成员函数时使用名称修饰的原因)

不要使用 C/C++ 头文件作为函数的参考,而是使用工具查看从 DLL 导出的函数并直接使用这些名称。

Dependency Walker 是一个很好的工具:http://www.dependencywalker.com/

【讨论】:

以上是关于平台调用#define指令[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java调用cmd命令

java调用操作系统命令

Java 调用cmd.exe命令

同一指令中的类实例化和方法? [关闭]

RK3399平台开发系列讲解(内核入门篇)1.52printk函数分析 - 其函数调用时候会关闭中断

RK3399平台开发系列讲解(内核入门篇)1.52printk函数分析 - 其函数调用时候会关闭中断