使用C++ 来调用C#DLL 并且调试程序

转载:https://www.cnblogs.com/zytlk/p/16812928.html

使用C++ 来调用C#DLL 并且调试程序
环境:使用VS studio 2019

C#项目的设置
1、C# -> 属性 -> 应用程序 -> 目标框架 ->.NET Framework 4

2、C# -> 属性 -> 调试 -> 调试程序引擎 -> 勾上 启用本地代码调试

3、C# -> 属性 -> 生成 -> 输出 -> 勾上 为COM互操作注册

C++项目的设置
1、首先创建一个C++的控制台程序,下面我们将在C++项目中修改

2、使用#using 来添加DLL 示例:#using "hhhh.dll"

3、项目->属性-> C/C++ -> 命令行 ->其他选项 添加:/Zc:twoPhase-

4、项目->属性->配置属性->高级->C++/CLI属性 -> 公共语言运行时支持 选择 公共语言运行时支持(/clr)

5、C/C++ -> 常规 -> 调试信息格式 -> 选择 程序数据库(/Zi)

注意
1、^这个符号是使得托管和非托管代码混合开发更加方便

下面是一个小的demo

// MyDLLResult.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#using "hhhh.dll"

using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
using namespace hhh;
using namespace std;
int main()
{
    hhh::hhh^ api = gcnew hhh::hhh();
    char strhhh[]{ "123456789" };
    String^ hhhh = System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)strhhh);
    char strOhhh[]{ "hhhhh" };
    String^ hhhhh = System::Runtime::InteropServices::Marshal::PtrToStringAnsi((IntPtr)strOhhh);
    String^ Restlt = api->ORBIC_TAB_CUSTOMIZATION_INFO_GET(hhhh , hhhhh );

    char* outStr = (char*)Marshal::StringToHGlobalAnsi(Restlt).ToPointer();
    cout << "outStr:"<<outStr <<endl;
    cout << "Hello World!\n";
}

``
posted @ 2023-12-08 10:43  txwtech  阅读(231)  评论(0编辑  收藏  举报