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

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

本文关键字:phone windows Invoke C++ 调用 问题 函数      更新时间:2023-10-16

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

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

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


--------在C#侧:

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

Q3.在*.cs文件中,使用脱木素,所有参考都使用脱木素。但一些参考使用

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

有些人没有。这让我很困惑。*.cs中的dll函数是否必须使用Dlexport?


--------在C++侧:

Q4.人们说,项目设置明智,我应该使用C++/CLI(公共语言基础结构)让我困惑的是,(CLI)是项目中的一个设置吗?我如何知道我的C++项目是否是CLI?或者我该如何设置?我如何知道我的C++项目是否是托管的?或者我该如何设置?

实际上我在C++中新建/删除了,所以它应该是机器代码(非托管)但是,调用C#函数的C++项目必须进行管理吗?托管/非托管是否与CLI有关?


--------在C#和C++项目方面:

问题5没有一个教程告诉我如何连接项目!

我是这样做的:通用属性->添加新的参考

但是当试图从C++调用C#函数时,它告诉我错误,未解决的外部。我试着把函数放在C#名称空间中,然后在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#函数。。。。