SFCS

由于近期需要进行(C# DLL-->C++ DLL -->MFC):

1.创建c# DLL

   a. 新建工程


       a.创建工程内容:

using System;
using System.Collections.Generic;
using System.Text;
using WebServiceForCSharpDll.WebReference;



namespace WebServiceForCSharpDll
{
    
    public class Class1 
    {
       private WebReference.WebService m_web; 
       public Class1()
        {
            m_web = new WebReference.WebService();
        }
    
        public string Upload3DGapStepData( string szStage, string [] DataBuf, int nDataBufLen)
        {
            clsDynamicParameter usn = new clsDynamicParameter();
            usn.strParam = "v_usn";
            usn.strValue = DataBuf[0];

            clsDynamicParameter stage = new clsDynamicParameter();
            stage.strParam = "v_stage";
            stage.strValue = DataBuf[1];

            clsDynamicParameter location = new clsDynamicParameter();
            location.strParam = "v_location";
            location.strValue = DataBuf[2];

            clsDynamicParameter type = new clsDynamicParameter();
            type.strParam = "v_type";
            type.strValue = DataBuf[3];

            clsDynamicParameter value = new clsDynamicParameter();
            value.strParam = "v_value";
            value.strValue = DataBuf[4];

            clsDynamicParameter [] param = new clsDynamicParameter[] {usn, stage, location, type, value};

            return m_web.DynamicDBFunction("FUN_GETGAPSTEP", "AO", param);             
        }
       
        public string GetUploadResultFor3DGapStep( string szUSN)
        {
        
            clsDynamicParameter usn = new clsDynamicParameter();
            usn.strParam = "v_usn";
            usn.strValue = szUSN;
            clsDynamicParameter [] array = new clsDynamicParameter[] { usn};
            return m_web.DynamicDBFunction("FUN_GAPSTEP_RESULT", "AO", array);
        }
    }
}

(使用dynamicparameter函数进行数据上传到系统)

c. 项目属性设置:

     settings-->(Name, Type: Web Service, Scope:Application,Value:网址)

这样就可以输出了(MFC先调用确认封装是否正确)

**********************************************************************************

2. c++封装 C# DLL

   a.加载c# dll

   头文件:

#pragma once

#include <string>
using namespace std;

#using ".\\WebServiceForCSharpDll.dll"
using namespace WebServiceForCSharpDll;
using namespace System;
using namespace System::Runtime::InteropServices;
class CSFCSAPIList
{
public:
   CSFCSAPIList();
   ~CSFCSAPIList();


public :
    BOOL SFCS_UploadAndGetRetFor3DData(int nFunIndx, CString szStage, CString szData[], int nSize, CString &szErrMsg);

};

.CPP

#include "stdafx.h"
#include "SFCSAPIList.h"

CSFCSAPIList::CSFCSAPIList(){}

CSFCSAPIList::~CSFCSAPIList(){}



BOOL CSFCSAPIList::SFCS_UploadAndGetRetFor3DData(int nFunIndx, CString szStage, CString szData[], int nSize, CString &szErrMsg)
{
	Class1 ^p = gcnew Class1();

	string *tempBuf = new string[nSize];
	array<System::String^>^ pBuf = gcnew array<System::String^>(nSize);
	for(int i = 0; i < nSize; i++)
	{
		tempBuf[i] = szData[i].GetBuffer();//(*(szData++)).GetBuffer();
		pBuf[i] = gcnew System::String(tempBuf[i].c_str());//((*tempBuf++).c_str());
	}

	string szStageTemp = szStage.GetBuffer();
	System::String^ szRet = "OK";
	if(nFunIndx  == 0)
		szRet =  p->Upload3DGapStepData(gcnew System::String(szStageTemp.c_str()), pBuf, nSize);
	else
		szRet = p->GetUploadResultFor3DGapStep(pBuf[0]);

	CString szResult = "";
	szResult = static_cast<CString>(szRet);


	//MarshalString(szRet, szResult);
	//CString szRetTemp(szResult.c_str());
	//szErrMsg = szRetTemp;
	szErrMsg = szResult;
	BOOL bRet = FALSE;
	if(szResult.Find("NG") != -1 && szResult.GetLength() == 2)
		bRet =  FALSE;
	else
		bRet = TRUE;


	szStage.ReleaseBuffer();
	/*
	for(int i = 0; i < nSize; i++)
		(*(szData++)).ReleaseBuffer();
	*/

   delete [] tempBuf;
   delete [] pBuf;
   delete [] p;
   return bRet;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值