【问题标题】:Platform invoke #define directive [closed]平台调用#define指令[关闭]
【发布时间】: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# 调用,因为它们并不是真正的函数,它们只是插入到函数调用所在位置的一堆指令。只需使用常规函数。

标签: c# c++ c pinvoke


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 2011-09-11
    • 1970-01-01
    • 2011-08-30
    • 2021-12-30
    • 2016-01-05
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多