关于从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的文章,这个线程可能是重复的。。。。。
但到目前为止,我还没有找到一个包含项目的"完整"线程,挂钩教会了我如何做到这一点还有很多术语让我感到困惑。所以我必须创建这个线程:
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#函数。。。。
- 仅在Windows Phone目标中0x8007007E
- 我可以使用Visual Studio 2015来创建Windows Phone 8应用程序吗?
- Windows Phone 8:监控混合C#/C++中的内存使用情况
- 如何振动Windows Phone 8.1
- Windows Phone 8(仅限C++) - 可以访问设备制造商
- Windows Phone 中的进程相关性
- 将C++日志源代码段转换为Windows Phone C++/CX
- windows phone 8 and ATL
- Direct3D 中的 Windows Phone 8 触摸位置
- No FileIO in Windows Phone?
- 正确的方法来确保使用Windows Phone应用程序部署C DLL
- 如何在Windows Phone 8 C /CLI应用程序中集成DLMALLOC
- UTF8 文本编码 - Windows Phone 8.1 C++
- 关于从C++调用C#函数的问题,在windows phone上反向P/Invoke
- 我们不能用c来开发windows phone 7.5应用程序
- 在Windows Phone 8.1中保持应用程序在锁屏下运行
- 使用C++代码在Windows Phone 8.1中获取Unique DeviceId
- 在我的加速度计数据上应用一些过滤器-Windows phone 8,C++
- _wfopen_s在 Windows Phone 应用中无法正常工作
- 编译支持 OpenSSL 的 Windows Phone 8.1 Qt 5.5 时出现问题