【问题标题】:Something like javah for c#类似于 c# 的 javah
【发布时间】:2018-05-10 08:35:41
【问题描述】:

我正在尝试在 c# 中制作一些东西并增加一些速度,我希望在 c++ 中完成一些方法。我以前在java中做过类似的事情,它真的很有趣而且有点简单。尝试在 c# 中执行此操作令人沮丧。 java 中最简单的部分现在是 c# 中最难的部分:找出在 native/extern 中使用的参数。对于像 int、double 和其他基本类型这样的东西很简单,但是对于像结构和类这样更复杂的东西,我该怎么做呢?使用 java,jdk 中有一个名为 javah 的程序可以为您执行此操作,但是经过 3 小时的谷歌搜索后,我没有发现 c#/c++ 桥接器这样的东西。我是忘记了还是没有这样的 C# 程序?

我知道 [DllImport] 我想知道如何将 public static extern void ExternFunction(MyCustomStruct m) 转换为 c++ 签名

【问题讨论】:

标签: c# c++ native


【解决方案1】:

你正在寻找DllImport属性:

class Example
{
    // Use DllImport to import the Win32 MessageBox function.
    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

    static void Main()
    {
        // Call the MessageBox function using platform invoke.
        MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
    }
}

详细教程: https://docs.microsoft.com/en-us/dotnet/framework/interop/consuming-unmanaged-dll-functions

识别哪个DLL有什么功能: https://docs.microsoft.com/en-us/dotnet/framework/interop/identifying-functions-in-dlls

【讨论】:

  • 我知道 [DllImort] 我想知道如何将 public static extern void ExternFunction(MyCustomStruct m) 转换为 c++ 签名
【解决方案2】:

就本机声明而言,您几乎可以独立完成,您可以使用 MSDN 文档(或 SDK 标头)查找您可能想要使用的任何公共 Windows API 的签名。如果您要访问的代码不是来自 MS,则标头是最有可能的路径。

原生 C 代码根本没有可靠的方法从二进制文件中获取函数签名。 C++ 有更多(但不多),您可以使用像 dumpbin.exe 这样的工具,它可以获取损坏的 C++ 符号并将其转换回人类可读的签名。然而,即使是用 C++ 编写的许多 DLL,也只会给出一个函数名列表,而没有任何类型信息。

【讨论】:

  • 我想将 c# 函数声明转换为 c++ 函数声明,而不是相反
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 2012-11-19
  • 2012-10-04
相关资源
最近更新 更多