据我了解,我可以使用反向P / Invoke从C ++调用C#。反向P / Invoke只是一个例子:
问题:
提前致谢
答案 0 :(得分:22)
以下是我所知的答案:
答案 1 :(得分:2)
注意,您还可以执行IL #dtr的C#dll和导出静态方法,这些方法与C ++ / CLI中的导出基本相同。但是,这始终是一个后编译步骤,它确实有some caveats(你的C ++ / CLI导出也是,顺便说一下。)。
您可以ILDASM C#和C ++ / CLI DLL来查看导出的方式;它是这样的(来自a sample on the net):
// unmexports.il
// Compile with : ilasm unmexports.il /dll
assembly extern mscorlib {}
..assembly UnmExports {}
..module UnmExports.dll
// This flag is important
..corflags 0x00000002
// This instructs the CLR to create a marshaling thunk for the unmanaged caller
..vtfixup [1] int32 fromunmanaged at VT_01
..data VT_01 = int32(0)
..method public static void foo()
{
..vtentry 1:1
..export [1] as foo
ldstr "Hello from managed world"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
答案 2 :(得分:1)
使用ilasm 2.0,您需要更少的代码,因为它可以自己生成大部分的垃圾。现在真的只需要.export指令。
// unmexports.il
// Compile with : ilasm unmexports.il /dll
.assembly extern mscorlib { auto }
.assembly UnmExports {}
.module UnmExports.dll
.method public static void foo()
{
.export [1] as foo
ldstr "Hello from managed world"
call void [mscorlib]System.Console::WriteLine(string)
ret
}