我试图在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 ++签名
答案 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也只是提供一个没有类型信息的函数名列表。