C# vs2022 + .NET Framework 4.6.1 + ABB 离线接口开发库 封装为动态库DLL文件,并由C++项目引用

一、环境说明

        开发环境:vs2022、.NET Framework 4.6.1、ABB离线接口库、vs2013

        开发语言:C#、C++

二、实现意义

        官方提供的ABB离线接口开发库由C#语言编写,但在实际项目中需要被C++项目调用。所以首先生成C#动态库,然后使用C++项目引用该动态库。

三、操作流程

         1.新建C#  类库(.NET Framework)项目

        2.打开新建项目属性,修改目标平台与C++项目平台一致(Debug/Release)与(x64/x86)        注意!勾选“为COM互操作注册”

        3.将测试有效的C#源码复制到新建项目.cs文件内,正常配置ABB官方库及第三方库(配置方式参考上一篇博客),以管理员身份运行VS2022下的该项目,点击生成解决方案即可生成DLL动态库文件,输出路径位于与目标平台对应的文件路径下。

        4.打开C++项目(本文环境为VS2013),项目属性—>配置属性—>常规

        公共语言运行时支持 选择 “公共语言运行时支持(/clr)”

        5.将前文封装好的动态库文件与其引用的第三方库文件,一同复制并添加至C++项目引用中。

        其中ABB_api_dll.dll、ABB_api_dll.pdb、ABB_api_dll.tlb为上文生成的动态库;RobotStudio.Services.RobApi.dll、RobotStudio.Services.RobApi.Desktop.dll、ABB.Robotics.Controllers.PC.dll、ABB.Robotics.Controllers.PC.xml为ABB官方提供接口库;ABB_dlltest为C++项目名。不要忘记在源码目录和运行目录下都要复制一遍。

        6.C++项目引用C#库时需要注意的差异:

        (1)动态库文件需要在引用文件中使用 #using 进行引入,不能使用 #include;不要忘记引入命名空间。

#using "ABB_api_dll.dll"
#using "ABB.Robotics.Controllers.PC.dll"

using namespace ABB_api_dll;
using namespace System;

        (2)C# 库生成对象指针时用 ^,代替C++使用的 *;使用gcnew 代替C++使用的 new 生成对象

ABB_api ^api = gcnew ABB_api();

       (3) C++与C#中的String类型是两种不同的数据类型,需要针对性转换。

四、部分代码示例

void ABB_dlltest::start()
{
	std::cout << "程序启动" << std::endl;
	
    // C++调用C#库时特殊的new方式
    ABB_api ^api = gcnew ABB_api();
    
    // 读取机器人控制系统名称
	string NamePath = ".\\release\\SystemName.txt";
	ifstream inFile(NamePath, ios::in | ios::binary);
	if (!inFile) {
		cout << "error" << endl;
	}
	char c[40];
	inFile.getline(c, 40);

    // C++与C#间不同String类型的转化
	string strc = std::string(c);
	inFile.close();
	System::String^ systemName = gcnew String(strc.c_str());

    // 调用离线功能接口
	api->Api_Scan(systemName);
	api->Api_MotorOn();
	api->Api_PointerReset();
	api->Api_StartAll();
	Sleep(6000);
	api->Api_StopAll();
	api->Api_MotorOff();

	std::cout << "运行完成,程序结束" << std::endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值