平台调用#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指令[关闭]的主要内容,如果未能解决你的问题,请参考以下文章