关于从 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# 函数....
目前我需要从 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# 函数....