目前我需要在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文件?
我真的很感谢你们的答案。
答案 0 :(得分:0)
反向P / Invoke意味着:
在C#中启动项目, 创建一个C#委托函数。 创建一个C ++ DLL。 在C#中调用函数 - >用C ++调用函数 - >调用C#委托函数。
这就是函数堆栈的样子:
| - > C#委托功能
| - > C ++ dll函数
| - > C#主要功能
这是对的吗? 所以这不是从C ++调用C#函数.... 如果我想从C ++调用C#函数,我该怎么办.... 我的意思是,我想启动一个C ++项目,并在该C ++项目中调用C#函数....