求教,托管标准c++类时“&”该如何处理
最近给了一个任务是用C#调用一个相对较大的C++编的程序。经过一段时间的学习,知道要做成动态链接库再用C#调用。对于单个的函数可以用Dllexport和DllImport来实现。对于类,c#是没法直接调用。在网上查找知道可以用CLR托管DLL就可以让C#调用了。即C#—C++/CLR—C++dll三位一体来实现。现在遇到一个问题不知道怎么解决。
先贴上 因为程序很长,所以我简化一下这里只贴上主要的问题部分
首先是先把程序做成动态链接库。 C++dll
[code=C/C++][/code]
//Input.h
#ifndef INPUT_H
#define INPUT_H
#include"stdafx.h"
#include<iostream>
using namespace std;
#pragma once
#ifndef GoWin_DLL_CLASS_EXPORTS
//该类可导出
#define GoWin_DLL_CLASS __declspec(dllexport)
#else
//该类可导入
#define GoWin_DLL_CLASS __declspec(dllimport)
#endif
class GoWin_DLL_CLASS Input
{
public:
Input(){}
Input( string&);
void title(string& baseFileName);
void randSeed(int& seedNum);
private:
inline void errorMsg( string& keyword) ;
vector< pair< string, string > > m_parsedData;
string m_baseFileName;
};
#endif
实现的部分就暂且不管它了。
接下来就是在CLR中实现托管
[code=C/C++][/code]
// CInput.h
#include <sstream>
#include<vector>
#include<fstream>
#pragma once
#include ".../Input.h"
#define GoWin_DLL_CLASS
namespace NMRclr {
public ref class CInput
{
private:
Input *_pNtvCppPro;
public:
CInput( );
~CInput( );
void title(string& baseFileName);
void randSeed(int& seedNum);
};
}
托管的dll就可以直接在C#中添加引用。
我有疑问的地方是上面代码中的引用&改怎么处理。因为c#不支持,这个“&”是要在C++dll中便改掉还是在CLR中改掉呢?要是改的话改怎么改?要是不用改的话需要再c#中做什么处理才可以?