evi*_*red 7 .net c# com interop com-interop
关于本机/托管互操作的大量错误信息让我感到困惑.
我有一个常规的C++ exe,它不是使用CLR构建的(它既不是托管C++,也不是C++/CLI,永远不会).这个C++ exe是"负责人",没有托管包装器.
我想从我的C++ exe中访问C#程序集中的一些代码.我可以使用COM从我的C++代码访问C#程序集.但是,当我的C#代码检测到一个事件时,我希望它回调我的C++代码.将在运行时提供要回调的C++函数指针.请注意,C++函数指针指向exe执行环境中的函数.它可以使用那里的静态成员.我不希望托管代码尝试加载一些DLL来调用函数(没有DLL).
如何通过COM/.NET将此C++函数指针传递给我的C#代码并让我的C#代码成功调用它?
谢谢!
您可能想要使用Marshal.GetDelegateForFunctionPointer:
MarshalAs根据需要使用的正确方法Marshal.GetDelegateForFunctionPointer打开指针变成一个C#-callable代表李俊峰张有这样的例子在这里.
请注意MSDN上提到的限制:
GetDelegateForFunctionPointer方法具有以下限制:
- 互操作方案不支持泛型.
- 您不能将无效的函数指针传递给此方法.
- 您只能将此方法用于纯非托管函数指针.
- 您不能将此方法与通过C++或GetFunctionPointer方法获得的函数指针一起使用.
- 您不能使用此方法从指向另一个托管委托的函数指针创建委托.
关于C++的部分可能是指类方法的函数指针.这仍应适用于全球职能.
| 归档时间: |
|
| 查看次数: |
2622 次 |
| 最近记录: |