关于从 C++ 调用 C# 函数的问题,在 windows phone 上反转 P/Invoke

Questions about Calling C# function from C++, Reversed P/Invoke on windows phone

目前我需要从 windows phone 上的 C++ 代码调用 C# 函数, 我读了很多关于 P/Invoke 的文章,这个帖子可能是重复的.....

但到目前为止我还没有找到 "complete" 线程包含项目和挂钩教我如何做到这一点 还有很多术语让我感到困惑。 所以我必须创建这个线程:

Q1。如果我不想使用 COM,我应该使用的技术叫做 ? 这项技术要求我创建一个 C# dll,然后我可以从 C++ 代码调用 C# dll 中的函数,对吗?


--------在 C# 方面:

Q2。项目明智 我应该将要从 C++ 代码调用的函数放在 C# DLL 项目中。 所以我创建的项目类型是 我还需要在项目端手动设置什么吗?

Q3。在 *.cs 文件中, 使用deligate,所有引用都使用deligate。 不过有些参考用

[DllExport( "blah.dll", CallingConvention=CallingConvention.StdCall) ]

有些不是。 这让我很困惑。 *.cs 中的 dll 函数是否必须需要 Dllexport?


--------在 C++ 方面:

Q4。人们说,项目设置明智, 我应该使用 C++/CLI(公共语言基础设施) 令我困惑的是,(CLI)是项目中的设置吗? 我怎么知道我的 C++ 项目是 CLI 还是不是?或者我该如何设置? 我怎么知道我的 C++ 项目是托管的还是非托管的?或者我该如何设置?

其实我new/delete用的是C++,所以应该是机器码(非托管) 但是调用C#函数的C++工程是不是就得管? managed/unmanaged 与 CLI 有关系吗?


--------在 C#/C++ 项目端:

Q5None教程告诉我如何连接项目!

我是通过添加到这样的来做到这一点的: 通用属性->添加新引用

但是当尝试从 C++ 调用 C# 函数时, 它告诉我错误,未解决的外部问题。 我试着把函数放在 C# 名称 space 中, 然后在 C++ 中,我写:

using namespace MyCSharpNamespace;

它给我一个错误:

error C2871: 'MyCSharpNamespace' : a namespace with this name does not exist

如果是C++ dll,我只需要包含C++头文件就可以了。 但是我该如何处理 *.cs 文件?

非常感谢你们的回答。

好吧,我只是意识到我的某些部分是错误的, 我只知道什么是反向 P/Invoke:

反转P/Invoke表示:

在 C# 中启动项目, 创建 C# 委托函数。 创建一个 C++ dll。 在 C# 中调用一个函数 -> 在 C++ 中调用一个函数 -> 调用 C# 委托函数。

函数堆栈是这样的:

|-> C# 委托函数

|-> C++ dll 函数

|-> C# 主函数

对吗? 所以这不是从 C++ 调用 C# 函数.... 如果我想从 C++ 调用 C# 函数,我该怎么办.... 我的意思是,我想启动一个 C++ 项目,并在该 C++ 项目中调用一个 C# 函数....