类似javah for c#

时间:2017-11-27 06:44:36

标签: c# c++ native

我试图在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 ++签名

2 个答案:

答案 0 :(得分:1)

您正在寻找 package com.large.file; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; public class Java8StreamRead { public static void main(String[] args) { long startTime = System.nanoTime(); Path file = Paths.get("c:/temp/my-large-file.csv"); try { //Java 8: Stream class Stream<String> lines = Files.lines( file, StandardCharsets.UTF_8 ); for( String line : (Iterable<String>) lines::iterator ) { //System.out.println(line); } } catch (IOException ioe){ ioe.printStackTrace(); } long endTime = System.nanoTime(); long elapsedTimeInMillis = TimeUnit.MILLISECONDS.convert((endTime - startTime), TimeUnit.NANOSECONDS); System.out.println("Total elapsed time: " + elapsedTimeInMillis + " ms"); } } 属性:

DllImport

详细教程: 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

答案 1 :(得分:0)

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

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