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

时间:2015-04-13 17:19:32

标签: c# c++ windows-phone-8 windows-phone-8.1

目前我需要在Windows Phone上用C ++代码调用C#函数, 我读了很多关于P / Invoke的内容,这个帖子可能是重复的......

但到目前为止,我没有找到一个包含项目的“完整”线程,并且联系人教我如何做到这一点 还有很多术语让我很困惑。 所以我必须创建这个帖子:

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


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

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

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

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

其中一些没有。    这让我很困惑。    Dllexport是否必须用于* .cs?

中的dll函数

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

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

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


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

Q5教程没有告诉我如何连接项目!

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

但是当尝试从C ++调用C#函数时,    它告诉我错误,未解决的外部。    我试过将函数放在C#名称空间中,    然后在C ++中,我写道:

using namespace MyCSharpNamespace;

它给了我一个错误:

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

如果它是C ++ DLL,我只需要包含C ++头文件,然后就完成了。    但是我怎么处理* .cs文件?

我真的很感谢你们的答案。

1 个答案:

答案 0 :(得分:0)

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

反向P / Invoke意味着:

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

这就是函数堆栈的样子:

| - > C#委托功能

| - > C ++ dll函数

| - > C#主要功能

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