在c++非托管应用中使用c#托管应用类
Use C# managed app class in C++ unmanaged app
我有一个用c#编写的类的项目,我用它来序列化一些数据。
[XmlType("CPersoane")]
public class CPersoana
{
public CPersoana() { }
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("profession")]
public string Profession{ get; set; }
[XmlAttribute("age")]
public int Age{ get; set; }
//...
}
我还有另一个项目在相同的解决方案中编写c++ MFC(没有CLR支持),带有3个文本框的对话框。
我如何从c++中访问"cpersonana"类,以便我可以在文本框中使用"Name","Profession"answers"Age"?
任何帮助都将非常感激!
首先,你的c#项目需要是一个DLL(输出类型=类库)。
其次,你不能在非托管c++中访问c#代码,你的c++项目至少需要一个用/CLR
编译的源文件,在那里你可以访问你的c#类。
在源文件中,您可以编写像
这样的代码#using "MyCSharpProject.DLL"
using namespace MyCSharpNamespace;
...
gcroot<CPersoana^> pPersona = gcnew CPersoana();
CString sFileName = <path to file>;
pPersona->LoadFromFile(gcnew System::String(sFileName));
// LoadFromFile would be a member function in the CPersoana class
// like bool LoadFromFile(string sFileName)
CString sName(pPersona->Name->ToString();
...
写COM应该不难:
namespace CPersoanaNameSpace
{
[Guid("8578CEB3-6C04-4FC2-BB80-FB371A9F")]
[ComVisible(true)]
public interface ICPersoanaCOM
{
[DispId(1)]
void Name(out string name);
[DispId(2)]
void Profession(out string profession);
[DispId(3)]
void Age(out int age);
}
}
实现接口
[ComVisible(true)]
[Guid("6BE742E0-CDEC-493A-B755-D5Crtr5w6A545"),
public class CPersoana: ICPersoanaCOM
{
//...
}
然后在c++中使用:
//Import tlb
#import "path to tlbPersoana.tlb" named_guids raw_interfaces_only
using namespace System;
int main(array<System::String ^> ^args)
{
CoInitialize(NULL); //Initialize all COM Components
CPersoanaNameSpace::CPersoanaCOMPtr objPtr;
HRESULT hRes = objPtr.CreateInstance(CPersoanaNameSpace::CLSID_CPersoana);
if (hRes == S_OK)
{
BSTR LocName;
objPtr->Name(&LocName);
}
}
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 有没有任务栏API可以立即应用注册表更改
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?