类似于c#的Javah



我正在尝试在c#中做出一些东西,并添加一些速度,我希望在C 中完成一些方法。我以前在Java做过这样的事情,这真的很有趣而且很容易。试图在C#中做到这一点一直令人沮丧。现在,Java中最简单的部分是C#最难的部分:找出本机/外部中要使用的参数。借助INT,Double和其他基本类型之类的东西,这很简单,但是如何使用更复杂的结构和类(例如结构和类)来做到这一点?使用Java,JDK中有一个名为Javah的程序,它可以为您做到这一点,但是经过3个小时的谷歌搜索,我发现C#/C 桥没有发现这样的东西。我是遗忘的还是C#没有这样的程序?

我知道[dllimport]我想知道如何将public static extern void ExternFunction(MyCustomStruct m)转到C 签名

您正在寻找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://learn.microsoft.com/en-us/dotnet/framework/interop/consuming-unmanaged-dll-functions

确定哪个DLL具有什么功能:https://learn.microsoft.com/en-us/dotnet/framework/interop/indiseifying-functions-ind-in-dlls

就本地声明所做的而言,您几乎可以自己使用MSDN DOC(或SDK标头)来查找您可能想要的任何公共Windows API的签名使用。如果您要访问的代码不是来自MS。

,则标题是最有可能的路线

本机C代码根本没有从二进制中获取功能签名的可靠方法。C 具有更多(但不多),您可以使用诸如dumpbin.exe之类的工具,该工具可以采用混乱的C 符号,然后将其转回人类可读的签名。但是,即使用C 编写的DLL也只会给出一个没有任何类型信息的函数名称列表。

最新更新