https://docs.microsoft.com/en-us/dotnet/standard/native-interop/pinvoke函数指针。c#里叫delegate.
文档里先讲 C#调用cpp, [DllImport("user32.dll")] , 声明个extern函数,告诉runtime,调用时从指定的dll中找。
又讲了cpp调C#,
1 定义delegate FunA(就是函数指针),与cpp中的某个函数签名一样;
2 同上[DllImport("user32.dll")], 定义extern FunB(FunA p, ...)
3 定义符合FunA的的 C#函数. FunAImpl
4 调用FunB( FunAImpl)
我想了下,这个方案的问题是,必须C#先跑,先加载cpp.dll,再把自己交过去。
要是main在cpp中,就不行。
又搜了一下,
https://stackoverflow.com/questions/14257428/reverse-pinvoke-from-native-c
直接以cpp中,调用CorBindToRuntimeEx
第一篇叫 P/Invoke, 第二篇叫CLR Hosting APIs. 后者感觉跟在Cpp里跑python时,包含了python的头文件,加了python的dll差不多。
其实觉得最好的还是c#里 DllExport 个函数,那边 LoadLibrary(在mac上叫open?),FindSymbol,再调用,这种方式最好。 不知C#+Mac,能完成不。以前用过一次Delphi,
导出个函数的感觉跟这差不多。查到的链接就是你的那个链接。
https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
【 在 z16166 的大作中提到: 】
: 只讨论进程内调用。因为用C#单独写一个可执行程序给C++调用肯定是没问题的。
: Windows上是没问题的,用VC提供的interop,或者通过COM DLL方式。
: 还有一个库可以让C#导出接口给C++用,不知道这个库是否能支持macos
: ...................
--
修改:DoorWay FROM 61.185.158.*
FROM 61.185.158.*