由于近期需要进行(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;
}